首页 > 解决方案 > 城市名称验证正则表达式 Swift 4

问题描述

我一直在尝试对给定的城市名称实施正则表达式验证。

我的正则表达式应该匹配城市名称,例如:

NY
San Francisco
München
København
Saint-Tropez
St. Lucia

到目前为止,我已经在网上搜索了类似的正则表达式,但我一直很难尝试快速实现它。

这是我想出的正则表达式,它似乎可以在其他语言中使用,但不能在 swift 中使用:

^[a-zA-Z\\u0080-\\u024F\\s\\/\\-\\)\(\`\.\"\']+$

另外作为附加信息,我想在 UITextField 委托方法中实现它:

shouldChangeCharactersIn

像这样的东西:

override func textField(_ textField: UITextField,
                            shouldChangeCharactersIn range: NSRange,
                            replacementString string: String) -> Bool {

        return validNameRegex.matches(string)
    }

使用 NSRegularExpression 扩展:

extension NSRegularExpression {

    convenience init(_ pattern: String) {
        do {
            try self.init(pattern: pattern)
        } catch {
            preconditionFailure("Illegal regular expression: \(pattern).")
        }
    }


    func matches(_ string: String) -> Bool {
        let range = NSRange(location: 0, length: string.utf16.count)
        return firstMatch(in: string, options: [], range: range) != nil
    }
}

希望有人可以帮助我。提前谢谢,新年快乐:)

标签: swiftregextextfieldcity

解决方案


最后我最终使用了这个正则表达式:

^[a-zA-Z\u{0080}-\u{024F}\\s\\/\\-\\)\\(\\`\\.\\\"\\']*$

主要问题是在 unicode 中对“\”字符和 {} 进行转义


推荐阅读