Проблема с косой чертой в регулярном выражении Java

Мне нужно регулярное выражение для следующих данных:

Разрешены все цифры, все буквы или комбинации цифр и букв, включая специальные символы:

@ . – ‘ ? , ( ) : ; ! * $  _  =  + ^  &  #

и французские символы ударения Unicode.

Пожалуйста помоги. Я использую следующее регулярное выражение, которое отлично работает для других символов, но каким-то образом допускает прямую косую черту(/).

VALIDATOR_STRING = "^[A-Za-z0-9éÉèÈçÇâÂêÊôÔ@.'#,-?:;!*$_=+^&()]+$";

person Akshaya    schedule 19.09.2013    source источник


Ответы (1)


Если вы используете дефис - в классе символов (например, в A-Z), он обозначает диапазон (в этом примере каждая заглавная буква между A и Z).

Таким образом, вы разрешаете диапазон между ,-?, который содержит косую черту. Если вы посмотрите на http://www.asciitable.com, вы увидите, что этот диапазон содержит каждое из следующих персонажи: , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?

Чтобы избежать такого поведения, поместите тире в качестве первого или последнего символа в классе символов:

VALIDATOR_STRING = "^[-A-Za-z0-9éÉèÈçÇâÂêÊôÔ@.'#,?:;!*$_=+^&()]+$";
person jlordo    schedule 19.09.2013
comment
И/или вы можете избежать его с помощью обратной косой черты (как и любого другого специального символа). "[A\\-Z]" будет соответствовать A - Z - person Marc; 19.09.2013
comment
Спасибо, Джлордо и Марк! - person Akshaya; 19.09.2013