仅匹配字母字符和空格

时间:2012-01-26 15:52:44

标签: php regex

我有这个正则表达式:

/[^a-z\s]/i

这是为了匹配a-z和A-Z中的任何字符以及遇到的任何空格。它适用于角色,但不适用于空格,为什么?

我正在检查这样的PHP:

if (preg_match('/[^a-z\s]/i', $username)) {
    ...
}

我正在检查用户名是否包含除字母(a-z,A-Z)或空格之外的任何其他字符。

4 个答案:

答案 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]*$/