Swift正则表达式格式?
Swift regular expression format?
我熟悉 pcre 正则表达式,但它们似乎在 swift 中不起作用。
^([1-9]\d{0,2}(\,\d{3})*|([1-9]\d*))(\.\d{2})?$
验证像 1,000,000.00 这样的数字
但是,将其放入我的 swift 函数中会导致错误。
extension String {
func isValidNumber() -> Bool {
let regex = NSRegularExpression(pattern: "^([1-9]\d{0,2}(\,\d{3})*|([1-9]\d*))(\.\d{2})?$", options: .CaseInsensitive, error: nil)
return regex?.firstMatchInString(self, options: nil, range: NSMakeRange(0, countElements(self))) != nil
}
}
"Invalid escape sequence in litteral"
这是当然的,因为 pcre 使用“\”字符,swift 将其解释为转义符(我相信?)
因为我不能只使用我习惯的正则表达式。我如何将它们翻译成与 Swift 代码兼容?
在双引号内,单个反斜杠将被读取为转义序列。您需要再次转义所有反斜杠,以便将其视为正则表达式反斜杠字符。
"^([1-9]\d{0,2}(,\d{3})*|([1-9]\d*))(\.\d{2})?$"
从Swift 5开始,你可以像这样使用#"..."#
,这样你就不需要为Swift添加额外的转义序列:
#"^([1-9]\d{0,2}(\,\d{3})*|([1-9]\d*))(\.\d{2})?$"#
我熟悉 pcre 正则表达式,但它们似乎在 swift 中不起作用。
^([1-9]\d{0,2}(\,\d{3})*|([1-9]\d*))(\.\d{2})?$
验证像 1,000,000.00 这样的数字
但是,将其放入我的 swift 函数中会导致错误。
extension String {
func isValidNumber() -> Bool {
let regex = NSRegularExpression(pattern: "^([1-9]\d{0,2}(\,\d{3})*|([1-9]\d*))(\.\d{2})?$", options: .CaseInsensitive, error: nil)
return regex?.firstMatchInString(self, options: nil, range: NSMakeRange(0, countElements(self))) != nil
}
}
"Invalid escape sequence in litteral"
这是当然的,因为 pcre 使用“\”字符,swift 将其解释为转义符(我相信?)
因为我不能只使用我习惯的正则表达式。我如何将它们翻译成与 Swift 代码兼容?
在双引号内,单个反斜杠将被读取为转义序列。您需要再次转义所有反斜杠,以便将其视为正则表达式反斜杠字符。
"^([1-9]\d{0,2}(,\d{3})*|([1-9]\d*))(\.\d{2})?$"
从Swift 5开始,你可以像这样使用#"..."#
,这样你就不需要为Swift添加额外的转义序列:
#"^([1-9]\d{0,2}(\,\d{3})*|([1-9]\d*))(\.\d{2})?$"#