正则表达式禁止太多顺序,非空白字符 - 同时允许链接

时间:2011-04-22 01:28:04

标签: regex regex-negation

我正在寻找使用正则表达式来替换只有前35个字符的非空白字符(例如超过35个)的连续运行。我想允许其中带有“http”的字符串保持不变(以免断开链接)。

字符串将来自用户输入,如果有人在一行中键入50'x'字符,它可能会超出我的<DIV>容器并中断布局。这些运行可能出现在一行的开头或一行的中间。

E.G。我想不允许这些类型的输入:

  

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

     

12345   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

但不是这些:

  

http://somesite.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

     

12345   http://somesite.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

我想到了使用this question

中的否定代码

我正在使用此正则表达式获得混合结果:

$comment=preg_replace('/^(((?!http).){25})(((?!http).)*)$/imUs', '$1',$comment);

正则表达式保留链接,但它也可以修剪可接受的文本,最多25个字符。

  

文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本

正在成为

  

文本文本文本文本tex

从其他问题中读取正则表达式,我感觉这可以通过比我上面显示的更优雅的正则表达式来完成。感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

我想出了这个,并且一些快速测试似乎表明它适合我,但请告诉我它是否适合您。

$comment = preg_replace('/(^|\s)((?!http)[^\s"]{25})[^\s"]+/i', '$1$2', $comment);

显然应该用你的最大长度替换25。