2010-09-30 135 views
0

如何让下列正则表达式只接受我希望它接受的符号以及空格?这个正则表达式为什么不用空格?

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

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

它目前会接受HAM-BURGER这个完美的东西,它应该接受。当用户想输入HAM BURGER时遇到问题(< - 注意空间)。

如果我从开头删除^和/或从结尾删除$,如果用户键入任何内容,它将成功。我尝试的补救措施是将*变成+,但只要用户至少放入一个可接受的字符,它就会接受任何东西。

回答

6

添加空间的字符类:

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

是的,这是简单

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

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

正则表达式解释说:

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

  • [...]是一个字符类。

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

+2

或者,如果你想包括任何空白 - 包括空格或制表符 - 添加“\ S”字符代替空格。此外,您在结尾处使用*,这意味着它将匹配任意数量的这些字符 - 从0开始 - 因此空白字符串将匹配。 – 2010-09-30 18:16:11

+0

@Bruno Obrigado,eu corrigi o problema。 – Confluence 2010-09-30 18:16:19

+0

谢谢!我认为这很简单,我只是不希望它成为一个可怕的安全漏洞,这种做法令人不悦,或者即将被弃用的方法论。 – Eric 2010-09-30 18:37:44

相关问题