允许字符的正则表达式

时间:2012-08-04 19:09:57

标签: php regex preg-match

我需要检查一下,如果我的PHP代码中的字符串只包含指定的字符列表。但是,由于其中一些人可能需要景观,我无法让它发挥作用。我已经尝试了一切,但它只是不起作用......

所需的验证是:

  • 0-9
  • A-Z
  • A-Z
  • chars:。%^& ()$#@。/ - + /

基本上,我想检查是否有一个未知的ascii字符(我不知道是否有一个函数已经这样做了。)

我的代码现在是这样的:

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

那么,所有的字符都很特别吗?

3 个答案:

答案 0 :(得分:2)

不,所有这些角色都不特别。如果您不确定,可以让PHP使用preg_quote()

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

此外,preg_match()返回一个int,你在布尔值上做===,它永远不会成立,因为它们永远不会是同一类型。您只需检查if( !preg_match())

即可

答案 1 :(得分:1)

在正则表达式结束时,您可能遗漏了*。您也可以将该集合表示为[\x00-\x7F](取自here)。

这应该有效:

[\x00-\x7F]*

答案 2 :(得分:0)

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