我需要检查我的PHP代码中的字符串是否只包含指定的字符列表。但是由于他们中的一些人可能需要逃脱,我就是无法让它工作。我已经尝试了一切,但它就是不起作用...
所需的验证是:
- 0-9
- A-Z
- A-Z
- chars: .%^&()$#@!/-+/
基本上,我想检查是否有未知的ASCII字符(我不知道是否已经有函数可以做到这一点)。
我的代码现在是这样的:
if(preg_match("/[A-Za-z0-9'.'#'-'+'*'''/'='_'%'$'(')]/", $cmd) === false)
那么,所有的字符都是特别的?
不,所有这些字符都不特别。如果你不确定,你可以让PHP为你做转义,preg_quote()
:
$regex = '/[A-Za-z0-9' . preg_quote( '.%^&()$#@!/-+/', '/') . ']+/';
if( !preg_match( $regex, $cmd))
此外,preg_match()
返回一个int
,并且您正在对布尔值执行===
,这永远不会成立,因为它们永远不会是同一类型。您可以简单地检查if( !preg_match())
。
您可能在正则表达式结束时缺少*
。您也可以将集合表示为['x00-'x7F]
(从这里获取)。
这应该有效:
['x00-'x7F]*
if(preg_match("/[.%^&()$#@!/+-a-zA-Z'd's]+/", $cmd) === false)
如果您需要锚点if(preg_match("/^[.%^&()$#@!/+-a-zA-Z'd's]+$/", $cmd) === false)