2015-08-22 27 views
1

我试图净化用户输入并确保没有多余的断裂线或换行符。目前,我有,因为一个事实,即用户可以使用三种主要方式为“断裂线”将所有断裂线和换行符转换为单个断裂线

\n 
<br/> 
<br /> 

而且也有<br>许多变种麻烦。因为这些都是HTML格式的可接受格式。我试着在网上搜索和使用正则表达式以前的表情,但他们似乎并没有被捕获多个特征线的棘手

<br/><br /><BR><br> 

为了使事情变得更简单,我觉得整个字符串转换的唯一标准化的特征线,所以每\r\n会成为某种形式的<br/><br />,这可能更容易分析,通过执行类似:

$string = 'some input with breaklines and newlines'; 
$string = nl2br($string); 
$string = preg_replace(regex_expression, replacement, $string); 

不幸的是,我不知道正则表达式非常好。我如何创建一个正则表达式来移除所有断裂线的这些变体并将它们合并为一个?这些都是以前的我用:

$text = preg_replace('/(?:(?:\r\n|\r|\n)\s*){2}/s', "\n\n", $text); 
$text = preg_replace("/[\r\n]+/", "\n", $text); 
$text = preg_replace('/(<br[^>]*>\s*){2,}/', '<br/>', $text); 

或者,更好的,有没有更有效的使用和实践的方式来做到这一点?我猜大多数用户输入的网站有某种这个系统到位

下面是一个字符串的一个例子,我发现滑过:

String testing for newlines.<br/><br /> 
<br/><br /> 
<br/><br /> 
Edit 1<br/><br /> 
<br/><br /> 
<br/><br /> 
Edit 3:<br/><br /> 
Removed redundant newlines 

回答

3

你想要的是

$text = preg_replace("/(\r|\n|(\<\s*br\s*\/?\s*>))+/i", "<br/>", $text); 

将\ r,\ n,<[ ]br[ ][/][ ]><[ ]BR[ ][/][ ]>的所有倍数替换为单个<br/>