Regex禁止太多的顺序的非空白字符-同时允许链接



我希望使用正则表达式将非空白字符(例如超过35个)的连续运行仅替换为前35个字符。我希望允许带有"http"的字符串保持原样(以免断开链接)。

字符串将来自用户输入,如果有人在一行中输入50个'x'字符,它可能会超出我的<DIV>容器并破坏布局。可以在一行的开头,也可以在一行的中间。

如我想禁止这些类型的输入:

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

12345xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

但不包括这些:

http://somesite.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

12345http://somesite.com/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

我从这个问题中得到了使用消极的目光的想法

我得到混合的结果w/this regex:

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

该正则表达式保留了链接,但也将可接受的文本减少到25个字符。

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

正变得

text text text text text tex

从其他问题中阅读正则表达式,我有一种感觉,这可以用一个比上面展示的更优雅的正则表达式来完成。谢谢你的建议。

我想到了这个,一些快速的测试似乎表明它对我有效,但请让我知道它是否适合你。

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

显然用你的最大长度代替25

最新更新