textarea的preg_replace模式

时间:2014-01-13 14:51:41

标签: php regex preg-replace

我只是想只允许这个字符(theese在引号内)“a-z0-9.?!-_”(最后一个字符是空格)。有我的代码,但肯定有问题。我试图检查文档,但我迷路了。

$output = preg_replace('/![a-z0-9.!?-_ ]/i', '', $_POST['textarea']);

2 个答案:

答案 0 :(得分:2)

要取消字符类,请执行以下操作:

[^a-z0-9.!?_ -]

你拥有的(前面的!)并不是你如何否定它。另请注意,-应该被转义,或者移动到角色类的末尾,否则它具有特殊含义。

答案 1 :(得分:1)

这不是你否定一个角色类的方式。请改用插入符号(^)。

$output = preg_replace('/[^a-z0-9.!?_ -]/i', '', $_POST['textarea']);

连字符在字符类中使用时表示范围,除非它是类中的最后一个字符,类中的第一个字符,或者直接在开头否定插入符号(^)之后。在上面的正则表达式中,我已经将连字符的位置更改为最后一个,但是,为了清晰起见,我建议使用反斜杠(\^)将其转义。