php preg_match函数转义撇号化
在php中,我以如下方式验证字符串:php preg_match函数转义撇号化,php,php-7.2,Php,Php 7.2,在php中,我以如下方式验证字符串: 至少在字符长度上 仅包含字母数字加上破折号、下划线和美元符号(-\u$) 因此,我的结果代码是: if(!preg_match("/[a-zA-Z0-9\-_\$]+/", $input)) abort(400); // else continues 这是很好的工作,除了撇号字符的“如果字符串包含这两个字符中的一个,则应该验证失败,但实际情况并非如此。我认为我的正则表达式模式没有很好的结构,但我在这里找不到问题。您只检查字符串中是否存在字符(
- 至少在字符长度上
- 仅包含字母数字加上破折号、下划线和美元符号(-\u$)
if(!preg_match("/[a-zA-Z0-9\-_\$]+/", $input))
abort(400);
// else continues
这是很好的工作,除了撇号字符的“如果字符串包含这两个字符中的一个,则应该验证失败,但实际情况并非如此。我认为我的正则表达式模式没有很好的结构,但我在这里找不到问题。您只检查字符串中是否存在字符(在本例中是
Hello
)。您需要使用字符串的beginn(^
)和end($
)进行正则表达式:
if (!preg_match("/^[a-zA-Z0-9\-_$]+$/", 'Hello"')) {
abort(400);
} else {
//continues
}
演示:
我是否应该转义方括号内的
$
?
在这种情况下,您不需要使用\
来转义$
。如果需要正则表达式字符作为字符而不是正则表达式字符,则可以始终转义它们:\+*?[ ^ ] $ ( ) { } = ! < > | : -代码>尝试以下方法:
preg_match("/^[a-zA-Z0-9\-_\$]+$/", $input);
[a-zA-Z0-9-$]+
顺便说一句,我是否应该转义方括号内的$
?您不需要转义$
。有或没有逃逸没有区别(在这种情况下)。