我需要编写一个只有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";
}
答案 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";
}