我熟悉使用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
}
}
“litteral中的无效转义序列”
当然,这是因为pcre使用了"\“字符,swift将其解释为转义(我相信?)
所以,既然我不能只使用我习惯的正则表达式。如何将它们转换为与Swift代码兼容?
发布于 2015-03-08 01:40:12
在双引号内,单个反斜杠将作为转义序列读取。您需要再次对所有反斜杠进行转义,以便将其视为正则反斜杠字符。
"^([1-9]\\d{0,2}(,\\d{3})*|([1-9]\\d*))(\\.\\d{2})?$"
发布于 2021-11-13 06:56:29
从Swift 5开始,你可以像这样使用#"..."#
,这样你就不需要为Swift添加额外的转义序列:
#"^([1-9]\d{0,2}(\,\d{3})*|([1-9]\d*))(\.\d{2})?$"#
https://stackoverflow.com/questions/28917893
复制相似问题