PHP:preg_match

时间:2011-06-12 05:27:22

标签: php

我需要编写一个只有a-zA-Z0-9字符,下划线和空格(1或大于1)的情况,并忽略所有其余字符。我写了一个代码,但它不能正常工作。 在那些情况下应该是错的,但它显示确定

1) test msg@ 
2) test@msg  
3) test!msg

也应该没问题,但目前显示错误。

  

1)测试消息 - (两个空格)

我应该在我的代码中更改.pls帮助并查看下面的代码。

$message=$_GET['msg'];

if(preg_match('/[^A-Za-z0-9]\W/',$message))
{
   echo "Wrong";
}
else
{
 echo "OK";
}

2 个答案:

答案 0 :(得分:1)

以下是 riad 留下的优化版本:

$message = $_GET['msg'];

if ( preg_match('/^[a-z0-9_ ]+$/i', $message) )
{
   echo 'Ok';
}
else
{
 echo 'Wrong';
}

我从正则表达式中删除了A-Z(大写),因为使用了 i 修饰符。

我还想在你提供的例子中解释你做错了什么。

首先,通过将 ^ 放在方括号([])中,您实际上与您尝试做的相反。在方括号内放置 ^ 表示“不包括”。

你错过了*,+或?在方括号的末尾,除非你只想匹配一个字符。 *字符表示0或更多,+表示1或更多,?表示0或1。

\ W表示任何非单词字符。那可能不是你想要的。

最后,用^开始一个正则表达式意味着你要匹配的字符串的开头必须以^之后的内容开头。使用$结束正则表达式意味着字符串必须以$。

之前的字符结尾

所以输入/ ^ [a-z0-9_] + $ / i你要说匹配一个以a-z0-9_或空格开头的字符串,其中至少包含那些字符(+)和结尾

PHP有很多关于PCRE常规语法的文档,你可以在这里找到它们:http://ca2.php.net/manual/en/reference.pcre.pattern.syntax.php

答案 1 :(得分:0)

$message=$_GET['msg'];

if(preg_match('/^[a-zA-Z0-9_ ]+$/i',$message))
{
  echo "Wrong";
}
else
{
  echo "OK";
}