2012-02-10 10 views
7

Tengo una prueba de expresión regular para números (0-9) y/o barras diagonales (/). Se ve así:Escapar hacia adelante en la clase de caracteres jscript regexp?

/^[0-9/]+$/i.test(value) 

ahora yo creo que esto es correcto, pero el eclipse javascript validador no está de acuerdo:

Error de sintaxis en el símbolo "]", eliminar este token

Supongo que esto se debe a que el separador/delimitador es / y eclipse 'piensa' que la expresión regular ha finalizado (y por lo tanto, un ] sería inesperado).

Podemos satisfacer Eclipse de escapar de la / así:

/^[0-9\/]+$/i.test(value) 

Tenga en cuenta que ambas versiones funcionan para mí.

Mi problema con esto es:

  • Por lo que sé que no necesidad de escapar de la barra diagonal específicamente en ese rango. Puede ser específico de la situación (como en, para javascript es el delimitador usado).
  • Aunque ambos parecen estar trabajando, yo prefiero usar la versión 'correcta' debido a un comportamiento en diferentes ambientes, y, bueno .. porque correcto y todos :)

¿Alguien sabe lo que se supone que debo hacer? ¿Escape o no? no he encontrado ningún sitio de confianza que me dijo para escapar de la / en un rango, pero el Eclipse-validador probablemente no es completamente estúpido ...

+0

Sí, molestamente el resaltado de sintaxis de Notepad ++ también lo hace. – MikeM

Respuesta

8

La norma dice claramente que puede poner cualquier cosa sin escape en una clase de caracteres, excepto \, ] y salto de línea:

RegularExpressionClassChar :: 
    RegularExpressionNonTerminator but not ] or \ 
    RegularExpressionBackslashSequence 

RegularExpressionNonTerminator :: 
    SourceCharacter but not LineTerminator 

(http://es5.github.com/#x7.8.5). No es necesario escapar /.

Por otro lado, yo personalmente escaparía todo en caso de duda, solo para hacer felices a los analizadores menos inteligentes.

+0

Agradable :) No estoy realmente al día con el "estándar Ecma", este es el estándar utilizado para la mayoría de los analizadores .js? ¿Y puedes escapar de algo que no necesita escaparse sin romper cosas? – Nanne

+0

@Nanne: sí, la mayoría de los proveedores de JavaScript intentan mantenerse al día con el estándar ecma. No todo el mundo lo hace bien por completo, pero las cosas básicas deberían funcionar igual en todas partes. Y sí, una barra invertida adicional no duele, incluso cuando es seguro omitirla. – georg

Cuestiones relacionadas