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