城市名称验证正则表达式 Swift 4

City Name validation Regex Swift 4

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

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

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

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

这是我想出的正则表达式,它似乎适用于其他语言,但不适用于 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
    }
}

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

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

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

主要问题是转义 unicode 中的“\”字符和 {}