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.
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.
Simple Swift 4 version utilisant la méthode rangeOfCharacter
de la classe String
:
let numbersRange = stringValue.rangeOfCharacter(from: .decimalDigits)
let hasNumbers = (numbersRange != nil)
//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")}
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
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")
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")
}
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/
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)}
}