2012-02-10 5 views
7

Mam testowanie wyrażeń regularnych dla liczb (0-9) i/lub ukośników do przodu (/). Wygląda to tak:Escape forward slash w klasie znaków regexp jscript?

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

Teraz wierzę, że jest to poprawne, ale zaćmienie javascript validator nie zgadza:

błąd składni na znak "]", należy usunąć ten żeton

Przypuszczam, że dzieje się tak dlatego, że separator/separator to /, a zaćmienie "uważa", że wyrażenie regularne zostało zakończone (a zatem ] byłoby nieoczekiwane).

Możemy zaspokoić zaćmienie przez ucieczce / jak tak:

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

Należy zauważyć, że obie wersje dla mnie pracować.

Mój problem polega na tym:

  • O ile wiem, nie mam trzeba uciec ukośnik specjalnie w tym zakresie. Może to być zależne od sytuacji (tak jak w przypadku javascript jest to używany separator).
  • Chociaż oboje wydają się działać, wolałbym użyć „poprawną” wersję z powodu zachowania się w różnych środowiskach, a także .. ponieważ prawidłowe i wszystko :)

Czy ktoś wie, co ja Miał zrobić? Ucieczka czy nie? Nie mogę znaleźć żadnego renomowanego witrynę, która kazała mi uciec / w przedziale, ale Eclipse walidator prawdopodobnie nie jest całkowicie głupi ...

+0

Tak, denerwujące podświetlanie składni Notepad ++ również to powoduje. – MikeM

Odpowiedz

8

Norma mówi wyraźnie można kłaść Niecytowany w klasie znaków z wyjątkiem \, ] i nową linię:

RegularExpressionClassChar :: 
    RegularExpressionNonTerminator but not ] or \ 
    RegularExpressionBackslashSequence 

RegularExpressionNonTerminator :: 
    SourceCharacter but not LineTerminator 

(http://es5.github.com/#x7.8.5). Nie ma potrzeby ucieczki od /.

Po drugiej stronie, osobiście ucieknę od wszystkiego w razie wątpliwości, by uszczęśliwić mniej inteligentne parsery.

+0

Niezły :). Nie jestem naprawdę szybki z "Ecma Standard", to jest standard stosowany w większości parserów .js? I czy możesz uciec przed czymś, co nie musi uciekać bez rozbijania rzeczy? – Nanne

+0

@Nanne: tak, większość producentów javascriptów stara się nadążyć za standardem ecma. Nie wszyscy dobrze to rozumieją, ale podstawowe rzeczy powinny działać wszędzie tak samo. I tak, dodatkowy ukośnik odwrotny nie boli, nawet jeśli można go bezpiecznie pominąć. – georg

Powiązane problemy