PHP正则表达式允许换行不起作用

时间:2014-06-23 05:06:46

标签: php regex

PHP preg_match接受新行

我想通过 PHP preg_match 函数传递每个帖子/字符串。我想接受所有的alpha-numerics和一些特殊字符。帮我编辑我的语法以允许换行。当用户填写textarea并按回车键。以下语法不允许换行。

请反馈是否正确完成了以下特殊字符 */_:,.?@;-*

if (preg_match("/^[0-9a-zA-Z \/_:,.?@;-]+$/", $string)) { 
    echo 'good';
else {
    echo 'bad';
}

3 个答案:

答案 0 :(得分:2)

你快到了!

其他人提到的DOTALL修饰符与您的正则表达式无关。

要允许新行,我们只需将\r\n添加到您的角色类。您的代码变为:

if (preg_match("/^[\r\n0-9a-zA-Z \/_:,.?@;-]+$/", $string)) { 
    echo 'good';
else {
    echo 'bad';
}

请注意,此测试和正则表达式可以以更整洁的方式编写:

echo (preg_match("~^[\r\n\w /:,.?@;-]+$~",$string))? "***Good!***" : "Bad!";

查看底部online demo的结果。

  • \w匹配字母,数字和下划线,因此我们可以在字符类中删除它们
  • 将分隔符更改为~允许您使用/斜杠而不转义它(您需要转义分隔符)

答案 1 :(得分:0)

为任何非字母数字字符添加反斜杠总是安全的,所以:

/^[0-9a-zA-Z \/\_\:\,\.\?\@\;\-]+$/

还使用字符类:

/^[[:alnum:] \/\_\:\,\.\?\@\;\-]+$/

关于新线路哦:

/^[[:alnum:] \r\n\/\_\:\,\.\?\@\;\-]+$/

能够做那个字符串^(同样,使用单引号会更容易/更安全)

'/^[[:alnum:] \\r\\n\/\_\:\,\.\?\@\;\-]+$/'

答案 2 :(得分:0)

您可以使用替换来计算换行符:

/^(?:[0-9a-zA-Z \/_:,.?@;-]|\r?\n)+$/

顺便说一句,您可以将[A-Za-z0-9_]替换为[\w\d]来缩短表达式:

/^(?:[\w\d \/:,.?@;-]|\r?\n)+$/

所以:

if (preg_match('/^(?:[\w\d \/:,.?@;-]|\r?\n)+$/', $string)) {
    echo "good";
} else {
    echo "bad";
}