¿Cómo podemos comprobar si una cadena está formada solo por números? Estoy sacando una subcadena de una cadena y quiero verificar si es una subcadena numérica o no.
NSString *newString = [myString substringWithRange:NSMakeRange(2,3)];
iphone
objective-c
cocoa-touch
ios
nsstring
Abhinav
fuente
fuente
.
carácter[[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet]]
invertedSet
está devolviendo una clase que envuelve el conjunto en el que se creó y devuelve el valor opuesto para todas las consultas. Pero no lo sé con certeza.Sugeriría usar el
numberFromString:
método de la clase NSNumberFormatter , como si el número no fuera válido, devolverá nil; de lo contrario, le devolverá un NSNumber.fuente
NO
para su cadena. También vale la pena saberlo: también regresanYES
para números rellenados con espacios en blanco. Por cierto, acabo de agregar un fragmento de código real a su respuesta, espero que no le importe.Validar por expresión regular, por patrón
"^[0-9]+$"
, con el siguiente método-validateString:withPattern:
."^[0-9]+(.{1}[0-9]+)?$"
"."
."^[0-9]{4}$"
."."
, y la longitud está entre 2 ~ 5."^[0-9]{2,5}$"
."^-?\d+$"
La expresión regular se puede comprobar en el sitio web en línea .
La función de ayuda es la siguiente.
Versión Swift 3:
Prueba en el patio de recreo.
fuente
func numberOnly(string: String) -> Int { let expression = "" let regex = NSRegularExpression.init(pattern: expression, options: .caseInsensitive) let numberOfMatches = regex.numberOfMatches(in: string, options: .reportProgress, range: NSRange.init(location: 0, length: string.characters.count)) if numberOfMatches == 0 { return Int(string)! } return 0 }
Y recibí un errorPlayground execution aborted: error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
return matchRange.location != NSNotFound;
^-?\d+$
, lo verifiqué en el sitio: regex101.comPuede crear un NSScanner y simplemente escanear la cadena:
Consulte la documentación de NSScanner para conocer más métodos entre los que elegir.
fuente
isAtEnd
.Creo que la forma más fácil de verificar que cada carácter dentro de una cadena dada sea numérico es probablemente:
Utilice uno de los otros métodos de fábrica de NSCharacterSet si desea un control total sobre los caracteres aceptables.
fuente
Esta pregunta original era sobre Objective-C, pero también se publicó años antes de que se anunciara Swift. Entonces, si vienes aquí desde Google y estás buscando una solución que use Swift, aquí tienes:
fuente
Solución Swift 3 si necesita verificar que la cadena solo tiene dígitos:
fuente
.inverted
acciones innecesarias y de otro tipo.para ser claros, esto funciona para enteros en cadenas.
aquí hay una pequeña categoría de ayuda basada en la respuesta de John anterior:
en archivo .h
en archivo .m
uso:
fuente
La solución Swift 3 podría ser como:
fuente
La respuesta de John Calsbeek es casi correcta pero omite algunos casos de borde Unicode.
Según la documentación de
decimalDigitCharacterSet
, ese conjunto incluye todos los caracteres categorizados por Unicode comoNd
. Así su respuesta aceptará, entre otros:१
(U + 0967 DEVANAGARI DIGIT ONE)᠑
(U + 1811 MONGOLIAN DIGIT ONE)𝟙
(U + 1D7D9 DÍGITO UNO MATEMÁTICO DE DOBLE CUERDA)Si bien en cierto sentido esto es correcto, cada carácter en
Nd
se asigna a un dígito decimal, es casi seguro que no es lo que esperaba el autor de la pregunta. En el momento de escribir este artículo, hay 610 puntos de código categorizadosNd
, de los cuales solo diez son los caracteres esperados0
(U + 0030) a9
(U + 0039).Para solucionar el problema, simplemente especifique exactamente los caracteres que son aceptables:
fuente
Otra opción más:
Ejemplo de uso:
fuente
Una extensión de la respuesta de @John Calsbeek y una aclaración de los comentarios de @Jeff y @gyratory circus .
Los siguientes pueden agregarse como métodos de categoría para
NSString
fuente
Probar si una cadena es un número que podría ser útil
fuente
Extensión rápida:
fuente
Para Swift 3
fuente
Cuando tiene dígitos que son de idiomas mixtos , que usan (o no) los formatos de 0-9 dígitos, necesitará ejecutar una expresión regular que buscará cualquier número, lo siguiente es convertir todos los dígitos para que sean 0- 9 formato (si necesita el valor real):
fuente
La forma más fácil y confiable es intentar lanzar como
Double
, si el resultado esnil
, no se puede convertir en un número legítimo.Más información en la documentación: https://developer.apple.com/documentation/swift/double/2926277-init
fuente
Simple escribió la extensión de la cadena:
fuente