简体   繁体   English

如何检查字符串是否包含int? -迅速

[英]How to check if a string contains an int? -Swift

I need to know if a string contains an Int to be sure that a name the user entered is a valid full name, for that I need to either make the user type only chars, or valid that there are no ints in the string the user entered.我需要知道一个字符串是否包含一个 Int 以确保用户输入的名称是一个有效的全名,为此我需要让用户只输入字符,或者用户输入的字符串中没有整数进入。 Thanks for all the help.感谢所有的帮助。

You can use Foundation methods with Swift strings, and that's what you should do here.您可以对 Swift 字符串使用 Foundation 方法,这就是您在这里应该做的。 NSString has built in methods that use NSCharacterSet to check if certain types of characters are present. NSString内置了使用NSCharacterSet来检查某些类型的字符是否存在的方法。 This translates nicely to Swift:这很好地转化为 Swift:

var str = "Hello, playground1"

let decimalCharacters = CharacterSet.decimalDigits

let decimalRange = str.rangeOfCharacter(from: decimalCharacters)

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

If you're interested in restricting what can be typed, you should implement UITextFieldDelegate and the method textField(_:shouldChangeCharactersIn:replacementString:) to prevent people from typing those characters in the first place.如果您对限制可以输入的内容感兴趣,您应该实现UITextFieldDelegate和方法textField(_:shouldChangeCharactersIn:replacementString:)以防止人们首先输入这些字符。

Simple Swift 4 version using rangeOfCharacter method from String class:使用String类中的rangeOfCharacter方法的简单Swift 4版本:

    let numbersRange = stringValue.rangeOfCharacter(from: .decimalDigits)
    let hasNumbers = (numbersRange != nil)

This method is what i use now for checking if a string contains a number这个方法是我现在用来检查字符串是否包含数字的方法

func doStringContainsNumber( _string : String) -> Bool{

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

        return containsNumber
        }

If your string Contains a number it will return true else false.如果您的字符串包含一个数字,它将返回真否则假。 Hope it helps希望能帮助到你

        //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")}
//A function that checks if a string has any numbers
func stringHasNumber(_ string:String) -> Bool {
    for character in string{
        if character.isNumber{
            return true
        }
    }
    return false
}

/// Check stringHasNumber function
stringHasNumber("mhhhldiddld")
stringHasNumber("kjkdjd99900")
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)}
}

Swift 2.3.斯威夫特 2.3。 version working.版本工作。

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")

You need to trick Swift into using Regex by wrapping up its nsRegularExpression你需要通过包装它的 nsRegularExpression 来欺骗 Swift 使用 Regex

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")
}

I got these from http://benscheirman.com/2014/06/regex-in-swift/我从http://benscheirman.com/2014/06/regex-in-swift/得到这些

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")
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM