2013-02-21 131 views
0

我有一个正则表达式,它只允许在消息中的某些字符。 我想要实现的是允许换行以及将使用nl2br功能保留。正则表达式来保留换行符

这是我到目前为止有:

preg_replace('/[^a-zA-Z0-9ńśćółęążź\ .,-]/','',$message) 

至于我已经检查,下面的表达式应保留换行符,但我将它添加到上述表达有问题:

/(\r|\n|\r\n){2,}/ 
+0

我会打破字符串并检查每一行,而不是将换行符包括到正则表达式中。 – Goot 2013-02-21 09:37:46

回答

2

您只需将\r & \n添加到不能替换的字符列表中即可。所以:

preg_replace("/[^a-zA-Z0-9ńśćółęążź\ \.,\-\r\n]/",'',$message) 

在上面表达我也不得不改变'为“(使\r & \n确认),但也有过逃跑的.-字符

+1

还需要添加**全局标志**:/ [^ a-zA-Z0-9ńśćółęążź\ \。,\ - \ n \ r]/g – 2013-02-21 10:58:42

+0

PHP中没有'g'修饰符 – 2013-02-21 16:04:19

+0

是的,您是对的)preg_replace()将默认执行全局替换,并且** g **在PCRE中不是有效的修饰符(PHP使用的正则表达式实现) – 2013-02-21 16:18:24

1

我相信这是你正在寻找的

  • 使用preg_quote避免忘记转义某些字符,比如表达式中的“。”,我相信大多数人会破坏它。
  • 使用不区分大小写的 'i' 改性剂,而不是一个,ZA-Z
  • 如罗斯说,加\ r和\ n

打印的preg_replace( '/'。preg_quote(” [^ a-z0-9ńśćółęążź\。, - \ r \ n])')。 '/ i','','test \ r \ ntest \ rtest \ ntest“);