2015-08-03 38 views
11

ho bisogno di sapere se una stringa contiene un int per essere sicuri che un nome l'utente ha inserito è un nome valido e completo, per che ho bisogno di fare sia il tipo di utente solo caratteri, o valido che non ci sono interi nella stringa che l'utente ha inserito. Grazie per tutto l'aiuto.Come verificare se una stringa contiene un int? -SWIFT

+0

Converti in 'NSString' ed è possibile utilizzare' string.containsString (otherString) 'e basta controllare se contiene un numero. – Kendel

+1

Perché controllare solo per numeri interi? Sarebbe ➽, ⨕, o essere un personaggio valido? –

+0

Eventuali duplicati di http://stackoverflow.com/questions/25651612/how-do-i-check-uitextfield-values-for-specific-types-of-characters-e-g-letters. –

risposta

21

È possibile utilizzare i metodi della Fondazione con le stringhe Swift, e questo è quello che dovresti fare qui. NSString è costruito in metodi che usano NSCharacterSet per verificare se sono presenti alcuni tipi di caratteri. Questo si traduce bene a Swift:

var str = "Hello, playground1" 

let decimalCharacters = CharacterSet.decimalDigits 

let decimalRange = str.rangeOfCharacter(from: decimalCharacters) 

if decimalRange != nil { 
    print("Numbers found") 
} 

Se siete interessati a limitare ciò che può essere digitato, è necessario implementare UITextFieldDelegate e il metodo textField(_:shouldChangeCharactersIn:replacementString:) per impedire alle persone di digitare i caratteri in primo luogo.

+0

Swift 3, lasciate str = "Ciao, playground1" lasciare decimalCharacters = NSCharacterSet.decimalDigits lasciare decimalRange = str.rangeOfCharacter (da: decimalCharacters, opzioni: String.CompareOptions.literal, range: zero)! se decimalRange = nil { stampa ("numeri trovati") } – Jeff

0

È necessario ingannare Swift ad utilizzare Regex avvolgendo la sua nsRegularExpression

class Regex { 
    let internalExpression: NSRegularExpression 
    let pattern: String 

    init(_ pattern: String) { 
    self.pattern = pattern 
    var error: NSError? 
    self.internalExpression = NSRegularExpression(pattern: pattern, options: .CaseInsensitive, error: &error) 
    } 

    func test(input: String) -> Bool { 
    let matches = self.internalExpression.matchesInString(input, options: nil, range:NSMakeRange(0, countElements(input))) 
    return matches.count > 0 
    } 

}

if Regex("\\d/").test("John 2 Smith") { 
    println("has a number in the name") 
} 

ho ottenuto questi da http://benscheirman.com/2014/06/regex-in-swift/

+0

La domanda riguardava l'* Swift * linguaggio di programmazione, non si tratta di JavaScript. A proposito, ci sono più lettere di a-z, A-Z. Che ne dici di Ä o é? –

+0

Anche se questo risponde alla domanda di cifre di posizionamento in una stringa, forse potrebbe essere migliore per verificare se tutti i caratteri nella stringa sono validi (ad esempio, caratteri di parola o spazi) usando l'espressione regolare "^ [\\ w \\ s] + $" –

2

Questo metodo è quello che uso ora per verificare se una stringa contiene un numero

func doStringContainsNumber(_string : String) -> Bool{ 

     let numberRegEx = ".*[0-9]+.*" 
     let testCase = NSPredicate(format:"SELF MATCHES %@", numberRegEx) 
     let containsNumber = testCase.evaluateWithObject(_string) 

     return containsNumber 
     } 

Se la stringa contiene un numero che restituirà true altro falso. Speranza che aiuta

0
if (ContainsNumbers(str).count > 0) 
{ 
    // Your string contains at least one number 0-9 
} 

func ContainsNumbers(s: String) -> [Character] 
{ 
    return s.characters.filter { ("0"..."9").contains($0)} 
} 
2
 //Swift 3.0 to check if String contains numbers (decimal digits): 


    let someString = "string 1" 
    let numberCharacters = NSCharacterSet.decimalDigits 

    if someString.rangeOfCharacter(from: numberCharacters) != nil 
    { print("String contains numbers")} 
    else if someString.rangeOfCharacter(from: numberCharacters) == nil 
    { print("String doesn't contains numbers")} 
1

Swift 2.3. versione funzionante.

extension String 
{ 
    func containsNumbers() -> Bool 
    { 
     let numberRegEx = ".*[0-9]+.*" 
     let testCase  = NSPredicate(format:"SELF MATCHES %@", numberRegEx) 
     return testCase.evaluateWithObject(self) 
    } 
} 

Usage:

//guard let firstname = textField.text else { return } 
    let testStr1 = "lalalala" 
    let testStr2 = "1lalalala" 
    let testStr3 = "lal2lsd2l" 

    print("Test 1 = \(testStr1.containsNumbers())\nTest 2 = \(testStr2.containsNumbers())\nTest 3 = \(testStr3.containsNumbers())\n") 
1

semplice Swift 4 versione utilizzando rangeOfCharacter metodo da String classe:

let numbersRange = stringValue.rangeOfCharacter(from: .decimalDigits) 
    let hasNumbers = (numbersRange != nil)