PHP preg_match接受新行
我想通过 PHP preg_match 函数传递每个帖子/字符串。我想接受所有的alpha-numerics和一些特殊字符。帮我编辑我的语法以允许换行。当用户填写textarea并按回车键。以下语法不允许换行。
请反馈是否正确完成了以下特殊字符
*/_:,.?@;-*
if (preg_match("/^[0-9a-zA-Z \/_:,.?@;-]+$/", $string)) {
echo 'good';
else {
echo 'bad';
}
答案 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";
}