关于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
代码好吗?
它工作正常(%
部分除外)但是它会失败吗?
谢谢:)
答案 0 :(得分:4)
这个preg_match实际上让字符串带有“%”(百分号)通过,它不应该。为什么?
这是因为你的正则表达式中间有未转义的连字符:
'#[^0-9 -&()+@._A-Za-z]#'
--------^
-
充当从空格(32)到&
(38)的范围,从而匹配包括%
(37)之间的任何内容。
应该用作:
'#[^-0-9 &()+@._A-Za-z]#'
或者
'#[^-\w &()+@.]#'
但是没有锚点,这个字符类只匹配一个字符。你应该使用:
'#^[^-\w &()+@.]+$#'