web-dev-qa-db-fra.com

Comment vérifier si une chaîne contient un int? -Rapide

J'ai besoin de savoir si une chaîne contient un int pour être sûr que le nom saisi par l'utilisateur est un nom complet valide. Pour cela, il faut que le type d'utilisateur soit composé uniquement de caractères, ou que le nom d'utilisateur ne soit pas saisi. chaîne que l'utilisateur a entrée ..__ Merci pour toute l'aide. 

13
Arbel Israeli

Vous pouvez utiliser les méthodes Foundation avec les chaînes Swift, et c'est ce que vous devriez faire ici. NSString a des méthodes intégrées qui utilisent NSCharacterSet pour vérifier si certains types de caractères sont présents. Cela se traduit joliment par Swift:

var str = "Hello, playground1"

let decimalCharacters = CharacterSet.decimalDigits

let decimalRange = str.rangeOfCharacter(from: decimalCharacters)

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

Si vous souhaitez restreindre ce qui peut être saisi, vous devez implémenter UITextFieldDelegate et la méthode textField(_:shouldChangeCharactersIn:replacementString:) pour empêcher les personnes de saisir ces caractères.

31
Tom Harrington

Simple Swift 4 version utilisant la méthode rangeOfCharacter de la classe String:

    let numbersRange = stringValue.rangeOfCharacter(from: .decimalDigits)
    let hasNumbers = (numbersRange != nil)
9
Mario Steingruber
        //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")}
3
Lukasz D

Cette méthode est ce que j'utilise maintenant pour vérifier si une chaîne contient un nombre

func doStringContainsNumber( _string : String) -> Bool{

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

        return containsNumber
        }

Si votre chaîne contient un nombre, elle retournera true sinon false. J'espère que ça aide

2
Joker

Swift 2.3. la version fonctionne.

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
Darkwonder

let numericCharSet = CharacterSet.init (charactersIn: "1234567890")

let newCharSet = CharacterSet.init (charactersIn: "~` @ # $% ^ & * () {} [] <>? ")

let sentence = "Tes # ting4 @ Charact2er1Seqt"

        if sentence.rangeOfCharacter(from: numericCharSet) != nil {

            print("Yes It,Have a Numeric")
            let removedSpl = sentence.components(separatedBy: newCharSet).joined()
            print(sentence.components(separatedBy: newCharSet).joined())
            print(removedSpl.components(separatedBy: numericCharSet).joined())
        }
        else
        {
            print("No")
        }
0
user10834996

Vous devez convaincre Swift d’utiliser Regex en enveloppant son expression 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")
}

Je les ai reçues de http://benscheirman.com/2014/06/regex-in-Swift/

0
Clay Sills
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)}
}
0
Miika Pakarinen