Регулярное выражение для проверки разрешенных символов, не работающих в Java - PullRequest
6 голосов
/ 09 ноября 2011

У меня есть следующий метод для проверки разрешенных символов:

private boolean checkIfAllCharsAreValid(String test) {
    boolean valid = false;
    if (test.matches("^[a-zA-Z0-9,.;:-_'\\s]+$")) {
        valid = true;
    }
    return valid;
}

но если в тесте есть символ -, совпадение возвращает false. Должен ли я сбежать от -?

Ответы [ 3 ]

10 голосов
/ 09 ноября 2011

Внутри [ ... ] символ - обрабатывается специально.(Вы сами используете это в этой специальной цели в начале своего выражения, где у вас есть a-z.)

Вам нужно экранировать символ -

[a-zA-Z0-9,.;:\-_'\s]
              ^

или поместить егопоследний (или первый) в выражении [...], например

[a-zA-Z0-9,.;:_'\s-]
                   ^

Некоторые дополнительные примечания:

  • Технически говоря, все символы допустимы в пустой строке, поэтому я бы изменил с + на * в вашем выражении.

  • String.matches проверяет полную строку, поэтому ^ и $ являются избыточными.

  • Весь ваш метод может быть записан как

    return test.matches("[a-zA-Z0-9,.;:_'\\s-]*");
    
2 голосов
/ 09 ноября 2011

A - в классе символов, окруженном с обеих сторон, является метасимволом регулярного выражения для обозначения диапазона.

Чтобы перечислить литерал - в классе char, вы избегаете - в charкласс:

if (test.matches("^[a-zA-Z0-9,.;:\\-_'\\s]+$")) 
                                 ^^^ 

или поместите - в конце класса char:

if (test.matches("^[a-zA-Z0-9,.;:_'\\s-]+$")) 
                                      ^

или поместите - в начале класса char:

if (test.matches("^[-a-zA-Z0-9,.;:_'\\s]+$")) 
                    ^
1 голос
/ 09 ноября 2011

Вы можете поставить - в начале группы символов, чтобы она не интерпретировалась как диапазон символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...