Как проверить, содержит ли строка int? -Swift
Мне нужно знать, содержит ли строка Int, чтобы убедиться, что имя, введенное пользователем, является действительным полным именем,
для этого мне нужно либо сделать тип пользователя только символами, либо действительным, чтобы в строке, введенной пользователем, не было int.
Спасибо за помощь.
Ответы
Ответ 1
Вы можете использовать методы Foundation со строками Swift и что вы должны здесь делать. NSString
имеет встроенные методы, которые используют NSCharacterSet
для проверки наличия определенных типов символов. Это хорошо подходит для Swift:
var str = "Hello, playground1"
let decimalCharacters = CharacterSet.decimalDigits
let decimalRange = str.rangeOfCharacter(from: decimalCharacters)
if decimalRange != nil {
print("Numbers found")
}
Если вам интересно ограничить то, что можно ввести, вы должны реализовать UITextFieldDelegate
и метод textField(_:shouldChangeCharactersIn:replacementString:)
, чтобы люди не могли набирать эти символы в первую очередь.
Ответ 2
Этот метод используется для проверки того, содержит ли строка число
func doStringContainsNumber( _string : String) -> Bool{
let numberRegEx = ".*[0-9]+.*"
let testCase = NSPredicate(format:"SELF MATCHES %@", numberRegEx)
let containsNumber = testCase.evaluateWithObject(_string)
return containsNumber
}
Если ваша строка содержит число, она вернет true else false. Надеюсь, что это поможет.
Ответ 3
//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")}
Ответ 4
Swift 2.3. версия работает.
extension String
{
func containsNumbers() -> Bool
{
let numberRegEx = ".*[0-9]+.*"
let testCase = NSPredicate(format:"SELF MATCHES %@", numberRegEx)
return testCase.evaluateWithObject(self)
}
}
Использование:
//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")
Ответ 5
Простая версия Swift 4 с использованием метода rangeOfCharacter
из класса String
:
let numbersRange = stringValue.rangeOfCharacter(from: .decimalDigits)
let hasNumbers = (numbersRange != nil)
Ответ 6
Вам нужно обмануть Swift в использование Regex, завернув его 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")
}
Я получил их из http://benscheirman.com/2014/06/regex-in-swift/
Ответ 7
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)}
}