为什么这个正则表达式在播放?

时间:2012-05-23 16:24:58

标签: php regex preg-match

我写过这个函数:

function contain_special($string){
# -- Check For Any Special Chars --
if(preg_match('/[^a-z0-9]/',$string)){
# - Special Chars Were Found -
return true;    
}//end of special chars found
else{
# - String Does Not Contain Special Chars -
return false;   
}//end of else - does not contain special chars 
}//end of function

检查字符串是否包含特殊字符。

该函数应该忽略字母数字字符并查找特殊字符。如果找到,请返回true,否则返回false

现在,在使用大多数特殊字符进行测试时,一切正常:

$text="sdfs-df";

var_dump(contain_special($text));//returns true because "-" was found

但是,当我的$不在字符串的某个位置时,该函数无法取出它:

$text="sdfsdf$";//this works
$text="sdf$sdf";//this does not work
$text="$sdfsdf";//this works

关于我在这里做错了什么的想法?

3 个答案:

答案 0 :(得分:2)

看看echo $text。您可能没有使用您认为自己的字符串。文字美元符号通常需要以双引号字符串进行转义,以便您不使用变量$sdfsdf

我建议在这里使用单引号。

http://php.net/manual/en/language.types.string.php

答案 1 :(得分:0)

^用于字符串的开头。好的 - 它也会否定间隔(但你不需要否定 - 只需切换true和false)

$用于字符串结尾。

*意味着零次。

所以我认为你想要的正则表达式是: \^[a-z0-9]*$\

这有用吗?

答案 2 :(得分:0)

双引号中的美元开始变量替换,除非它们后面没有有效启动变量名的char。 这解释了为什么$text="sdfsdf$"有效而$text="sdf$sdf"无效。 如果您有一个名为$sdfsdf的变量。

,那么您的上一个示例可能会有效