swift - 城市名称验证正则表达式 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
}
}
希望有人可以帮助我。提前谢谢,新年快乐:)
解决方案
最后我最终使用了这个正则表达式:
^[a-zA-Z\u{0080}-\u{024F}\\s\\/\\-\\)\\(\\`\\.\\\"\\']*$
主要问题是在 unicode 中对“\”字符和 {} 进行转义
推荐阅读
- python - 如何在 Django 中将字符串转换为调用模型的名称?
- vba - VBA 进行随机计算并确认正确答案
- python - Pandas: how to merge two dataframes on a column by keeping the information of the first one?
- typescript - Angular6 typescript 扩展方法 Observable
- facebook - 如何使用 API v3+ 获取 Facebook 群组帖子作者的数据
- google-chrome - 无法在 Chrome 无头模式下播放 DRM 内容
- c# - MouseEventHandler 的 MouseHook
- azure - Azure Functions v2 从 .Net Standard 更改为 .Net Core
- c# - 如何在 C# 中使用自定义正则表达式?
- node.js - Express:匹配url中语言代码的路由