例如,假设我有:
$blah = "C$#@#.a534&";
我希望过滤字符串,只保留字母、数字和 ".",得到 "C.a534"。
我该如何做?
如果你知道应该允许哪些字符,你可以使用否定字符组(在正则表达式中)来删除其他所有内容:
$blah = preg_replace('/[^a-z0-9\.]/i', '', $blah);
注意我在正则表达式中使用了i修饰符。它匹配不区分大小写,因此我们无需指定a-z
和 A-Z
。
这个问题已经被许多人回答过,但是:
function cleanit($input){
return preg_replace('/[^a-zA-Z0-9.]/s', '', $input);
}
$blah = cleanit("C$#@#.a534&");
$text = preg_replace('/[' . preg_quote('CHARSYOUDONTWANT','/') . ']/','',$text);
$text = preg_replace('/[^' . preg_quote('CHARSONLYYOUWANT','/') . ']/','',$text);
$blah = "C$#@#.a534&";
$blah = preg_replace('/[' . preg_quote('$#@&','/') . ']/','',$blah);
echo $blah;
preg_quote()
函数时,应该指定分隔符,以便它也可以被转义。 - jwueller/
,它将不会被转义,因为在正则表达式中它没有特殊含义。可以通过显式指定分隔符来防止这种情况发生。 - jwueller或者反过来做:
$text = preg_replace('/[^a-zA-Z0-9.]/','',$text);
.
。 - Nick.
,但是我不是100%确定。 - smottt