Eliminar saltos de línea redundantes con expresiones regulares
-
03-07-2019 - |
Pregunta
Estoy desarrollando un sitio de publicación única en PHP que simplemente muestra mensajes que publican los visitantes (idealmente en torno al tema del sitio web). Cualquiera puede publicar hasta tres mensajes por hora.
Dado que el sitio web solo tendrá una página, me gustaría controlar la longitud vertical de cada mensaje. Sin embargo, quiero preservar al menos parcialmente los saltos de línea en el mensaje original. Un compromiso sería permitir dos saltos de línea, pero si hay más de dos, reemplácelos con un total de dos saltos de línea seguidos. Stack Overflow implementa esto.
Por ejemplo:
" Puercoespines \ nare \ n \ n \ n \ nporcupiney. "
se cambiaría a
" Puercoespines < br / > son < br / > < br / > puercoespín. quot;
Un aspecto complicado de verificar los saltos de línea es la posibilidad de que se recopilen y almacenen como \ r \ n, \ r o \ n. Pensé en convertir todos los saltos de línea a & Lt; br / & Gt; s usando nl2br (), pero eso parecía innecesario.
Mi pregunta: Utilizando expresiones regulares en PHP (con funciones como preg_match () y preg_replace ()), ¿cómo puedo verificar si hay instancias de más de dos saltos de línea seguidos (con o sin espacio en blanco entre ellos) y luego cambiarlos a un total de dos saltos de línea?
Solución
preg_replace('/(?:(?:\r\n|\r|\n)\s*){2}/s', "\n\n", $text)
Otros consejos
Algo así
preg_replace('/(\r|\n|\r\n){2,}/', '<br/><br/>', $text);
debería funcionar, creo. Aunque no recuerdo exactamente la sintaxis de PHP, podría necesitar un poco más de escape: - /