2015-12-18 7 views
10

Come posso verificare se searchView contiene solo numeri?Come si conferma che una stringa contiene solo numeri in Swift?

ho trovato questo:

if newText.isMatchedByRegex("^(?:|0|[1-9]\\d*)(?:\\.\\d*)?$") { ... } 

ma controlla se il testo contiene un numero qualsiasi. Come posso fare, che se tutto il testo contiene solo numeri in Swift?

+0

Prova l'analisi in un int. Se c'è qualcosa di diverso da int, genererà un errore. – ShahiM

+0

Come posso farlo con una via breve? @ShahiM –

risposta

31

ecco la soluzione è possibile ottenere tutte le cifre da String.

Swift 3.0:

let testString = "asdfsdsds12345gdssdsasdf" 

let phone = testString.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "") 

print(phone) 
+0

Questo NSCharacterSet includerà il tipo arabo di numeri? Voglio dire forse l'utente ha bisogno solo di questo tipo di numeri (1, 2, 3, 4, ...) ma anche la tastiera può includere tali numeri (123). Come posso controllare solo (1, 2, 3)? –

+1

@ СергейОлейнич, se vuoi essere sicuro di includere solo caratteri specifici nel tuo set, puoi definire il set di caratteri con il metodo '+ characterSetWithCharactersInString:'. ([fonte] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSCharacterSet_Class/#//apple_ref/occ/clm/NSCharacterSet/characterSetWithCharactersInString :)) – holex

+0

@holex Grazie tu) –

-3

questo dovrebbe funzionare:

func isNumeric(string: String) -> Bool 
{ 
    let number = Int(string) 
    return number != nil 
} 
+4

Questo non funziona se la stringa è troppo lunga e il risultato non si adatta a un 'Int'. In questo caso restituisce 'nil'. Prova una stringa con cifre '20'. – vacawama

2

è possibile utilizzare "^[0-9]+$" instade "^(?:|0|[1-9]\\d*)(?:\\.\\d*)?$"

Questo accetterà una o più cifre, se si desidera accettare solo una cifra quindi rimuovere +

+0

che dire dei numeri mobili? o negativi? quelli non sono più numeri? – holex

+0

"^ [0-9] + (\. [0-9] +)? $" Questo corrisponderà sia al floating che all'intigers se si desidera accettare solo decimal quindi utilizzare "^ [0-9] + \ . [0-9] + $ " – NSAnant

+0

in effetti. questo è il motivo per cui non è chiaro il motivo per cui raccomandi esplicitamente _non_ per usarlo. – holex

Problemi correlati