2012-08-23 48 views
6

Me gustaría validar un área de texto y simplemente no me aparece la expresión regular (Me tomó un día y un montón de tutoriales para resolverlo).Regex: permite todo excepto algunos caracteres seleccionados

Básicamente me gustaría poder permitir todo (saltos de línea y carros incluidos), pero los caracteres que podrían ser maliciosos (los que conducirían a una violación de seguridad). Como hay muy pocos caracteres que no están permitidos, asumo que tendría más sentido crear una lista negra que una blanca.

Mi pregunta es: ¿cuál es el estándar "todo menos" en Regex?

Estoy usando javascript y jquery.

He intentado esto, pero no funciona (que es horrible, lo sé ..):

var messageReg = /^[a-zA-Z0-9éèêëùüàâöïç\"\/\%\(\).'?!,@$#§-_ \n\r]+$/; 

Gracias.

+1

¿Qué quiere decir por lo que no funciona? ¿Cuál es el código que está usando esa expresión regular? –

+4

Esto no hará nada por seguridad. Se puede enviar un formulario sin javascript e incluso sin usar un navegador (ya que es solo un cierto tipo de solicitud HTTP). – Esailija

+1

RegEx no es realmente la forma correcta de estar a salvo de violaciones de seguridad. Este [hilo] (http://stackoverflow.com/questions/24723/best-regex-to-catch-xss-cross-site-scripting-attack-in-java) podría ser de su interés. La defensa contra XSS no se hace con expresiones regulares. – sQVe

Respuesta

1

Como menciona Esailija, esto no servirá para la seguridad real.

El código que mencionó es casi un conjunto negado, como se mencionó murgatroid99, el ^ va dentro de los corchetes. Entonces la expresión regular coincidirá con cualquier cosa que no esté en esa lista. Pero parece que realmente quieres quitar esos caracteres, por lo que tu expresión regular no necesita ser negada.

El código debería parecerse a:

str.replace(/[a-zA-Z0-9éèêëùüàâöïç\"\/\%\(\).'?!,@$#-_ \n\r]/g, ""); 

Eso dice, eliminar todos los caracteres en mi expresión regular.

Sin embargo, eso significa que no desea mantener a-zA-Z0-9 ¿está seguro de que quiere quitarlos?

Además, el cromo no le gusta § en las expresiones regulares, usted tiene que utilizar el \x junto con el código hexadecimal para el carácter

+0

Básicamente, quería permitir esos caracteres (es un conjunto grande pero estaba destinado a perder algo de peso más adelante). Gracias por la explicación – Baylock

15

Si desea excluir un conjunto de caracteres (algunos signos de puntuación, por ejemplo) que utilizaría el operador ^ al comienzo de un juego de caracteres, en una expresión regular como

/[^.?!]/ 

Esto coincide con cualquier carácter eso no es ., ?, o !.

+0

Gracias por su respuesta – Baylock

+2

En Stack Overflow usualmente preferimos usar votos en lugar de comentarios para decir que una pregunta es útil porque los comentarios como ese generalmente se consideran ruido y los votos son más útiles para otros. – murgatroid99

+0

Sí, la razón por la que hago eso es porque no sé cómo votar aquí. Todo lo que tengo es la capacidad de marcar una bandera verde. Pero solo se permite una bandera y demasiadas buenas respuestas. Estoy tratando de entender esto, pero aún no tengo idea. – Baylock

6

Puede utilizar el ^ como el primer carácter dentro de los paréntesis [] para negar lo que está en él:

/^[^abc]*$/ 

Esto significa: "de principio a fin, sin a, b o c."

+0

¡Gracias por la explicación! – Baylock

Cuestiones relacionadas