'& “在PHP正则表达式中

时间:2010-09-11 06:30:36

标签: php regex

这是正确的正则表达式,允许A-Z a-z 0-9和符号#&()-\;,.'"和空格吗?

我正在努力应对正则表达式中的'"。我做的正确吗?请注意\'\"。这似乎不对。什么是正确的方法呢?

if (preg_match('/^[a-z0-9#&()-\;,.\'\" ]+$/i', $username) )   
{   
    echo "Good";   
}   
else   
{   
    echo "Bad";   
} 

2 个答案:

答案 0 :(得分:2)

短划线应该被转义,双引号不需要。奇怪的是,你需要四倍来逃避分号前的反斜杠。否则,它被解释为您正在转义分号并被忽略。*

'/^[a-z0-9#&()\-\\\\;,.\'" ]+$/i'

你也可以在角色类的开头加一个未转义的破折号,虽然这有点模糊,可能会暂时混淆不知道该选项的人。它的工作原理是因为开头的短划线不能是有效字符范围的一部分,因此它只能是文字短划线字符。

'/^[-a-z0-9#&()\\\\;,.\'" ]+$/i'

*在正则表达式引擎看到之前,\\\\;被PHP缩减为\\;。然后,正则表达式引擎将\\;缩减为\;。因此,四个反斜杠!单个反斜杠\;变为;。同样适用于\\; - PHP将其减少到\;,然后正则表达式引擎将\;解释为普通的分号;。不少于四个。

†实际上,我撒了谎。你可以逃脱三个反斜杠。但是你有点滥用PHP解析器的宽容。四是绝对是最好的。

答案 1 :(得分:-1)

括号也需要逃脱

'/^[a-z0-9#&\(\)\-;,.\'" ]+$/i'