Мне нужно знать, содержит ли строка Int, чтобы убедиться, что имя, введенное пользователем, является действительным полным именем, для этого мне нужно либо сделать тип пользователя только символами, либо действительным, чтобы в строке, введенной пользователем, не было int. Спасибо за помощь.
Как проверить, содержит ли строка int? -Swift
Ответ 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)}
}