1

我写了这个函数:

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

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

4

3 回答 3

2

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

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

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

于 2012-05-23T16:29:42.903 回答
0

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

于 2012-05-23T16:43:31.430 回答
0

^是字符串的开头。好的 - 它也否定了间隔(但你不需要否定 - 只需切换真假)

$用于字符串结尾。

*表示零次或多次。

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

那样有用吗?

于 2012-05-23T16:34:04.393 回答