Mor*_*sus 0 php regex sign preg-match
我对 php 中的 preg_match 有几个问题。
if(preg_match('#[^0-9 -&()+@._A-Za-z]#', $input)){
$errors .= 'Sorry, username can\'t contain those characters.<br>';
}
Run Code Online (Sandbox Code Playgroud)
这是我的preg_match。我对这些代码有点陌生。我有红色,它最好#在结尾和开头使用,而不是/出于未知原因 xD 任何人都知道这是怎么回事?
我的主要问题是这preg_match实际上让带有%(百分比符号)的字符串通过,而它不应该。为什么?以及如何阻止?
另一个问题是这段preg_match代码好吗?它工作正常(%部分除外)但会失败吗?
谢谢 :)
这个 preg_match 实际上让带有“%”(百分号)的字符串通过,但它不应该。为什么?
这是由于正则表达式中间未转义的连字符:
'#[^0-9 -&()+@._A-Za-z]#'
--------^
Run Code Online (Sandbox Code Playgroud)
-充当从空间 (32) 到&(38) 的范围,因此匹配介于两者之间的任何内容,包括%(37)。
它应该用作:
'#[^-0-9 &()+@._A-Za-z]#'
Run Code Online (Sandbox Code Playgroud)
或者
'#[^-\w &()+@.]#'
Run Code Online (Sandbox Code Playgroud)
然而,如果没有锚,这个字符类将只匹配一个字符。你应该使用:
'#^[^-\w &()+@.]+$#'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1123 次 |
| 最近记录: |