Swift NSPredicate带有正则表达式,返回错误的结果
我编写了以下正则表达式来验证用户名:Swift NSPredicate带有正则表达式,返回错误的结果,swift,regex,Swift,Regex,我编写了以下正则表达式来验证用户名: /^[a-zA-Z0-9\\.\\.+$/ 然而,当我尝试使用它时,有些事情搞砸了,因为它给了我错误的结果。我尝试的输入与我的SO句柄相同:ilikecode。以下是我应用正则表达式的方式: let regex = "/^[a-zA-Z0-9\\._]+$/" let usernameTest = NSPredicate(format: "SELF MATCHES %@", regex) print("username is valid", username
/^[a-zA-Z0-9\\.\\.+$/
然而,当我尝试使用它时,有些事情搞砸了,因为它给了我错误的结果。我尝试的输入与我的SO句柄相同:ilikecode
。以下是我应用正则表达式的方式:
let regex = "/^[a-zA-Z0-9\\._]+$/"
let usernameTest = NSPredicate(format: "SELF MATCHES %@", regex)
print("username is valid", usernameTest.evaluate(with: username), username)
但是,正则表达式总是返回false
有人知道这是怎么可能的吗
谢谢 在某些语言中,
/…/
用于分隔正则表达式
模式,将模式与操作和选项分离,
比如说
if ($userName =~ m/^[a-zA-Z0-9\\._]+$/i)
在Perl中。但是,NSPredicate
(或NSRegularExpression
)只需要一个模式
作为参数,不包含斜杠
此外,匹配
操作符的锚点是隐式的,并且
[c]
选项可用于指定不区分大小写的匹配:
let regex = "[a-z0-9\\._]+"
let usernameTest = NSPredicate(format: "SELF MATCHES[c] %@", regex)
不要把图案放在
/…/
@MartinR-haha-jesus里,那花了我30分钟。。。你能回答这个问题吗?我愿意接受!用于定义正则表达式的表达式不太精确。/
是分隔操作、模式和选项的正则表达式分隔符。由于Swift中有特殊的正则表达式操作方法,因此无需执行任何操作(如m
匹配,或s
替换)。选项没有必要,因为您可以使用标志指定它们,或者将它们指定为内联选项((?i)
使其不区分大小写,或者(?m)
使^
/$
匹配行的开始/结束)。@WiktorStribiżew:您(当然)是对的!