2015-08-22 61 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/>