Javascript + Regex = Nada que repetir error?
Soy nuevo en Regex y estoy tratando de trabajar en uno de mis nuevos proyectos para ver si puedo aprenderlo y agregarlo a mi repitoire de habilidades. Sin embargo, estoy golpeando una barricada aquí.
Estoy tratando de ver si la entrada del usuario tiene caracteres ilegales usando la función .search
de la siguiente manera:
if (name.search("[\[\]\?\*\+\|\{\}\\\(\)\@\.\n\r]") != -1) {
...
}
Sin embargo, cuando intento ejecutar la función que esta línea contiene, arroja el siguiente error para esa línea específica:
Uncaught SyntaxError: Invalid regular expression: /[[]?*+|{}\()@.
]/: Nothing to repeat
No puedo por mi vida ver lo que es mal con mi código. ¿Alguien puede indicarme la dirección correcta?
3 answers
Necesita duplicar las barras invertidas utilizadas para escapar de los caracteres especiales de la expresión regular. Sin embargo, como @Bohemian señala, la mayoría de esas barras invertidas no son necesarias. Desafortunadamente, su respuesta sufre del mismo problema que la tuya. Lo que realmente quieres es:
La barra invertida está siendo interpretada por el código que lee la cadena, en lugar de pasarla al analizador de expresiones regulares. Usted quiere:
"[\\[\\]?*+|{}\\\\()@.\n\r]"
Observe la barra invertida cuadruplicada. Eso es definitivamente necesario. El la cadena pasada al compilador de expresiones regulares es entonces idéntica a la cadena de @Bohemian, y funciona correctamente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-09 22:11:54
Construyendo a partir de @ Bohemian, creo que el enfoque más fácil sería simplemente usar un literal regex, por ejemplo:
if (name.search(/[\[\]?*+|{}\\()@.\n\r]/) != -1) {
// ... stuff ...
}
Los literales de expresiones regulares son agradables porque no tienes que escapar del carácter de escape, y algunos IDE resaltarán expresiones regulares no válidas (muy útil para mí, ya que constantemente los arruino).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-12 00:12:03
En primer lugar, en una clase de caracteres[...]
la mayoría de los caracteres no necesitan escapar - son solo literales.
Por lo tanto, su expresión regular debe ser:
"[\[\]?*+|{}\\()@.\n\r]"
Esto compila para mí.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-09 22:10:59