Preg_match 和百分号
Preg_match and percent 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
代码好吗?
它工作正常(除了 %
部分)但它会失败吗?
谢谢:)
this preg_match actually let strings with "%" (percent signs) through and it shouldn't. Why?
这是由于正则表达式中间的未转义连字符所致:
'#[^0-9 -&()+@._A-Za-z]#'
--------^
-
的作用范围从 space (32) 到 &
(38),因此匹配介于两者之间的任何内容,包括 %
( 37).
应该用作:
'#[^-0-9 &()+@._A-Za-z]#'
或
'#[^-\w &()+@.]#'
然而,如果没有锚点,这个字符 class 将只匹配一个字符。你应该使用:
'#^[^-\w &()+@.]+$#'
我对 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
代码好吗?
它工作正常(除了 %
部分)但它会失败吗?
谢谢:)
this preg_match actually let strings with "%" (percent signs) through and it shouldn't. Why?
这是由于正则表达式中间的未转义连字符所致:
'#[^0-9 -&()+@._A-Za-z]#'
--------^
-
的作用范围从 space (32) 到 &
(38),因此匹配介于两者之间的任何内容,包括 %
( 37).
应该用作:
'#[^-0-9 &()+@._A-Za-z]#'
或
'#[^-\w &()+@.]#'
然而,如果没有锚点,这个字符 class 将只匹配一个字符。你应该使用:
'#^[^-\w &()+@.]+$#'