-1

我需要检查我的 PHP 代码中的字符串是否仅包含指定的字符列表。但由于他们中的一些人可能需要 scape,我就是无法让它工作。我已经尝试了一切,但它只是不起作用......

所需的验证是:

  • 0-9
  • AZ
  • 阿兹
  • 字符:.%^& ()$#@!/ -+/

基本上,我想检查是否有未知的 ascii 字符(我不知道是否有功能可以做到这一点)。

我的代码现在是这样的:

if(preg_match("/[A-Za-z0-9\.\#\-\+\*\\\/\=\_\%\$\(\)]/", $cmd) === false)

那么,所有的字符都是特殊的吗?

4

3 回答 3

2

不,所有这些字符都不是特殊的。如果您不确定,可以让 PHP 为您进行转义preg_quote()

$regex = '/[A-Za-z0-9' . preg_quote( '.%^&()$#@!/-+/', '/') . ']+/';
if( !preg_match( $regex, $cmd))

此外,preg_match()返回一个int,并且你正在做===一个布尔值,它永远不会成立,因为它们永远不会属于同一类型。您可以简单地检查if( !preg_match()).

于 2012-08-04T19:16:09.853 回答
1

您可能*在正则表达式的末尾缺少 a 。您也可以改为将集合表达为[\x00-\x7F](取自此处)。

这应该有效:

[\x00-\x7F]*
于 2012-08-04T19:16:33.363 回答
0

if(preg_match("/[.%^&()$#@!/+-a-zA-Z\d\s]+/", $cmd) === false) 如果你需要锚if(preg_match("/^[.%^&()$#@!/+-a-zA-Z\d\s]+$/", $cmd) === false)

于 2012-08-04T19:14:10.657 回答