只匹配字母字符和空白字符


Match only alpha characters and whitespace

我有这个正则表达式:

/[^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]*$/