为什么这个正则表达式不能用于空格?

时间:2010-09-30 18:09:32

标签: php regex

如何使以下正则表达式仅接受我希望它接受的符号以及空格?

if(!preg_match('/^[A-Z0-9\/\'&,.-]*$/', $line))
{
    die();
}
else
{
    //execute the rest of the validation script
}

我希望用户只能在给定的文本字段$ line中输入A-Z,0-9,正斜杠,撇号,&符号,逗号,句点和连字符。

它目前将接受HAM-BURGER的一些完美的东西,它应该接受。当用户想要键入HAM BURGER(< - 注意空格)时,我遇到了一个问题。

如果我从开头删除^和/或从结尾删除$,如果用户键入任何内容,它将成功。我试图解决这个问题的方法是将*变为+,但只要用户输入至少一个可接受的字符,它就会接受任何内容。

2 个答案:

答案 0 :(得分:6)

将空格添加到角色类:

if(!preg_match('/^[A-Z0-9\/\'&,. -]*$/', $line))

是的, 简单。

请注意,必须在-之前插入空格,因为它是字符类中的元字符(除非它是所述字符类中的第一个或最后一个字符)。另一种选择是逃避它:

if(!preg_match('/^[A-Z0-9\/\'&,.\- ]*$/', $line))

正则表达式解释说:

  • ^$是字符串锚点的开头和结尾。它告诉正则表达式引擎它必须匹配整个字符串而不仅仅是它的一部分。

  • [...]是一个角色类。

  • *是零或多重复运算符。这意味着它将接受一个空字符串。您可以将其更改为+(一个或多个),以便拒绝空字符串。

答案 1 :(得分:0)

这是RegEx的一个很好的参考,虽然专门用于Perl:

http://www.cs.tut.fi/~jkorpela/perl/regexp.html