我有这个正则表达式:
/[^a-z\s]/i
这是为了匹配a-z和A-Z中的任何字符以及遇到的任何空格。它适用于角色,但不适用于空格,为什么?
我正在检查这样的PHP:
if (preg_match('/[^a-z\s]/i', $username)) {
...
}
我正在检查用户名是否包含除字母(a-z,A-Z)或空格之外的任何其他字符。
答案 0 :(得分:4)
你的正则表达式应该是这样的:
/^[a-z\s]+$/i
if (preg_match('/^[a-z\s]+$/i', $username)) {
//the username is ok.
}
答案 1 :(得分:3)
/[^a-z\s]/i
仅匹配案例不敏感设置a-z和空格中不的字符。请尝试删除^
,否定括号内的字符。匹配所有字母和空格的模式应为:
/[a-z\s]/i
请注意\s
不仅仅匹配空格。它将匹配任何空白字符(如标签和换行符)。
如果您想使用字母或空格强制匹配开始,则必须将^
移到括号之外,如下所示:
/^[a-z\s]/i
最后,如果您尝试匹配以一个或多个字母和空格出现的字符串,则需要添加+
修饰符。否则它只匹配一个字符:
/^[a-z\s]+/i
答案 2 :(得分:2)
因为^字符是一个锚点并且你把它放错了...如果你使用^和$作为开始和结束字符串标记,它们需要分别出现在绝对的开头和结尾。
所以听起来像你想要的那样:
^[a-zA-Z\s]$
或者如果你想匹配alpha和/或空格的倍数,那么:
^[a-zA-Z\s]*$
答案 3 :(得分:1)
适合我!也许你应该包括一个完全可重复的例子,但它为我提供了空间。
你也可以重写这个正则表达式来做相反的事情,这对我个人来说更明显一点:
/^[a-z\s]*$/