web-dev-qa-db-ja.com

Swiftで文字列が英数字かどうかを確認します

Swiftでは、Stringが英数字であるかどうか、つまり1つ以上の英数字_[a-zA-Z0-9]、発音区別符号付きの文字を除く、例:é。

29
ma11hew28
extension String {
    var isAlphanumeric: Bool {
        return !isEmpty && range(of: "[^a-zA-Z0-9]", options: .regularExpression) == nil
    }
}

"".isAlphanumeric        // false
"abc".isAlphanumeric     // true
"123".isAlphanumeric     // true
"ABC123".isAlphanumeric  // true
"iOS 9".isAlphanumeric   // false
52
ma11hew28

最新のSwift 3および4ソリューション

extension String {

    func isAlphanumeric() -> Bool {
        return self.rangeOfCharacter(from: CharacterSet.alphanumerics.inverted) == nil && self != ""
    }

    func isAlphanumeric(ignoreDiacritics: Bool = false) -> Bool {
        if ignoreDiacritics {
            return self.range(of: "[^a-zA-Z0-9]", options: .regularExpression) == nil && self != ""
        }
        else {
            return self.isAlphanumeric()
        }
    }

}

使用法:

"".isAlphanumeric()         == false
"Hello".isAlphanumeric()    == true
"Hello 2".isAlphanumeric()  == false
"Hello3".isAlphanumeric()   == true

"Français".isAlphanumeric() == true
"Français".isAlphanumeric(ignoreDiacritics: true) == false

これは英語以外の言語で機能し、èやáなどの発音区別記号文字を使用できます。これらを無視する場合は、フラグ「ignoreDiacritics: true "。

22
gavanon

正規表現を使用して受け入れられた答えは具体的であるが、かなり重い解決策だと感じました。 Swift 3.0:

if yourString.rangeOfCharacter(from: CharacterSet.alphanumerics.inverted) != nil {
    return "Username can only contain numbers or digits"
}
13
carbonr
extension String {
    /// Allows only `a-zA-Z0-9`
    public var isAlphanumeric: Bool {
        guard !isEmpty else {
            return false
        }
        let allowed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
        let characterSet = CharacterSet(charactersIn: allowed)
        guard rangeOfCharacter(from: characterSet.inverted) == nil else {
            return false
        }
        return true
    }
}

XCTAssertFalse("".isAlphanumeric)
XCTAssertFalse("climate change".isAlphanumeric)
XCTAssertFalse("Poüet".isAlphanumeric)
XCTAssertTrue("Hawking2018".isAlphanumeric)
4
neoneye

この正規表現は、文字列に少なくとも1文字のアルファベット+ 8文字の文字が含まれていることを確認するために使用されていました。

"^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$"
1
Sarishti batta