如何检查一个字符串是否包含整数?-Swift

31

我需要知道一个字符串是否包含整数,以确保用户输入的名字是有效的全名, 为此,我需要让用户只输入字符,或者验证用户输入的字符串中没有整数。 感谢所有的帮助。


转换为 NSString,然后你可以使用 string.containsString(otherString),并检查它是否包含一个数字。 - Kendel
1
为什么只检查整数?➽、⨕、 、或者 会是有效的字符吗? - Martin R
可能是 http://stackoverflow.com/questions/25651612/how-do-i-check-uitextfield-values-for-specific-types-of-characters-e-g-letters 的重复问题。 - Martin R
9个回答

58
您可以使用 Foundation 方法处理 Swift 字符串,在这里应该这样做。NSString 内置了使用 NSCharacterSet 检查某些类型的字符是否存在的方法。这可以很好地转换为 Swift:

您可以使用 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:),以防止人们首先输入这些字符。


Swift 3,let str =“Hello,playground1” let decimalCharacters = NSCharacterSet.decimalDigits let decimalRange = str.rangeOfCharacter(from: decimalCharacters, options: String.CompareOptions.literal, range: nil) 如果decimalRange不为nil,则打印“找到数字” - Jeff

24

使用字符串类的rangeOfCharacter方法,简单的Swift 4版本:

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

8

这是我现在用来检查字符串是否包含数字的方法

func doStringContainsNumber( _string : String) -> Bool{

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

        return containsNumber
        }

如果您的字符串包含数字,它将返回true,否则返回false。希望能对您有所帮助。


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

虽然这个链接可能回答了问题,但最好在这里包含答案的解释/细节并提供理由。 - Mebin Joe

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

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

1

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

0

你需要通过封装它的nsRegularExpression来欺骗Swift使用正则表达式

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/获取了这些内容。


问题是关于 Swift 编程语言,而不是 JavaScript。顺便说一下,除了 a-z、A-Z 之外还有更多字母。Ä 或 é 怎么办? - Martin R
虽然这个方法回答了如何在字符串中定位数字的问题,但或许更好的办法是使用正则表达式 "^[\w\s]+$" 检查字符串中所有字符是否有效(即单词字符或空格)。 - David Berry

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接