允许字符的正则表达式


Regular expression for allowed characters

我需要检查我的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)