Подтвердить что ты не робот

Как проверить, содержит ли строка int? -Swift

Мне нужно знать, содержит ли строка Int, чтобы убедиться, что имя, введенное пользователем, является действительным полным именем, для этого мне нужно либо сделать тип пользователя только символами, либо действительным, чтобы в строке, введенной пользователем, не было int. Спасибо за помощь.

4b9b3361

Ответ 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)}
}