Como podemos verificar se uma string é composta apenas por números. Estou tirando uma substring de uma string e quero verificar se é uma substring numérica ou não.
NSString *newString = [myString substringWithRange:NSMakeRange(2,3)];
iphone
objective-c
cocoa-touch
ios
nsstring
Abhinav
fonte
fonte
.
caractere[[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet]]
invertedSet
está retornando uma classe que envolve o formulário de conjunto em que foi criado e retorna o valor oposto para todas as consultas. Mas não tenho certeza.Sugiro usar o
numberFromString:
método da classe NSNumberFormatter , pois se o número não for válido, ele retornará nulo; caso contrário, ele retornará um NSNumber.fonte
NO
para sua string. Também vale a pena saber: eles também retornamYES
para números preenchidos com espaços em branco. A propósito, acabei de adicionar algum trecho de código real à sua resposta, espero que você não se importe.Valide por expressão regular, por padrão
"^[0-9]+$"
, com o método a seguir-validateString:withPattern:
."^[0-9]+(.{1}[0-9]+)?$"
"."
."^[0-9]{4}$"
."."
, e o comprimento estiver entre 2 ~ 5"^[0-9]{2,5}$"
."^-?\d+$"
A expressão regular pode ser verificada no site online .
A função auxiliar é a seguinte.
Versão Swift 3:
Teste no playground.
fonte
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 }
E obtive o erroPlayground execution aborted: error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
return matchRange.location != NSNotFound;
^-?\d+$
, eu verifiquei no site: regex101.comVocê pode criar um NSScanner e simplesmente escanear a string:
Verifique a documentação do NSScanner para mais métodos para escolher.
fonte
isAtEnd
.Acho que a maneira mais fácil de verificar se todos os caracteres em uma determinada string são numéricos é provavelmente:
Use um dos outros métodos de fábrica NSCharacterSet se desejar controle total sobre os caracteres aceitáveis.
fonte
Esta pergunta original era sobre Objective-C, mas também foi postada anos antes do anúncio do Swift. Então, se você está vindo do Google e está procurando uma solução que usa Swift, aqui está:
fonte
Solução Swift 3 se necessário verificar se a string tem apenas dígitos:
fonte
.inverted
ações desnecessárias e outras.para ficar claro, isso funciona para inteiros em strings.
aqui está uma pequena categoria de ajudante baseada na resposta de John acima:
no arquivo .h
em arquivo .m
uso:
fonte
A solução do Swift 3 pode ser como:
fonte
A resposta de John Calsbeek está quase correta, mas omite alguns casos extremos do Unicode.
De acordo com a documentação de
decimalDigitCharacterSet
, esse conjunto inclui todos os caracteres categorizados por Unicode comoNd
. Assim, sua resposta aceitará, entre outras:१
(U + 0967 DEVANAGARI DIGIT ONE)᠑
(U + 1811 MONGOLIAN DIGIT ONE)𝟙
(U + 1D7D9 MATHEMATICAL DOUBLE-STRUCK DIGIT ONE)Embora em certo sentido isso seja correto - cada caractere em
Nd
mapeia para um dígito decimal - quase certamente não é o que o autor da pergunta esperava. No momento em que este livro foi escrito, havia 610 pontos de código categorizados comoNd
, apenas dez dos quais são os caracteres esperados0
(U + 0030) a9
(U + 0039).Para corrigir o problema, basta especificar exatamente os caracteres que são aceitáveis:
fonte
Ainda outra opção:
Exemplo de uso:
fonte
Uma extensão da resposta de @John Calsbeek e esclarecimento dos comentários de @Jeff e @gyratory circus .
O seguinte pode ser adicionado como métodos de categoria para
NSString
fonte
Teste se uma string é um número que pode ser útil
fonte
Extensão Swift:
fonte
Para Swift 3
fonte
Quando você tem dígitos de idiomas mistos , que usam (ou não) os formatos de 0-9 dígitos, você precisará executar uma regex que irá procurar por qualquer número, a próxima coisa é converter todos os dígitos para 0- Formato 9 (se você precisar do valor real):
fonte
A maneira mais fácil e confiável é tentar lançar como
Double
, se o resultado fornil
- não pode ser formado em um número legítimo.Mais informações na documentação: https://developer.apple.com/documentation/swift/double/2926277-init
fonte
Simple escreveu a extensão da string:
fonte