Preg_match和百分号

时间:2015-07-27 20:51:22

标签: php regex preg-match sign

关于php中的preg_match我几乎没有问题。

if(preg_match('#[^0-9 -&()+@._A-Za-z]#', $input)){
    $errors .= 'Sorry, username can\'t contain those characters.<br>';
}

这是我的preg_match。我对这些代码不熟悉。我有红色,最好使用#在结尾和开头而不是/由于未知原因xD 任何人都知道这是怎么回事?

我的主要问题是这个preg_match实际上允许带有%(百分号)的字符串,而不应该。为什么?以及如何阻止它?

另一个问题是这个preg_match代码好吗? 它工作正常(%部分除外)但是它会失败吗?

谢谢:)

1 个答案:

答案 0 :(得分:4)

  

这个preg_match实际上让字符串带有“%”(百分号)通过,它不应该。为什么?

这是因为你的正则表达式中间有未转义的连字符:

'#[^0-9 -&()+@._A-Za-z]#'
--------^

-充当从空格(32)到&(38)的范围,从而匹配包括%(37)之间的任何内容。

应该用作:

'#[^-0-9 &()+@._A-Za-z]#'

或者

'#[^-\w &()+@.]#'

但是没有锚点,这个字符类只匹配一个字符。你应该使用:

'#^[^-\w &()+@.]+$#'