Шаблон регулярного выражения для следующего случая, чтобы проверить имя

1

Я написал схему для следующего варианта использования

Вы можете использовать буквы верхнего и нижнего регистра, цифры и символы _, дефис, #, $, @

Длина имен должна быть не более 255 символов. по крайней мере один символ должен быть обязательным алфавитом или числом _, дефис, #, $, @

Я придумал regex ^[a-zA-Z0-9._-]*$ Является ли это допустимым, я не могу ограничить 255 символов и #, $, @validations

  Valid Ex: abc 12345
    abc12345
    abc.ert.trs.123
    abc.bcv.trs
    abc.trt#trs
     a
    a$
    $a#
    1234$
    567#
  test  123 #
  • 0
    Вы имеете в виду регулярное выражение, проверяющее имя длиной менее 255 символов?
  • 0
    Пожалуйста, укажите: является ли один из _ # $ @ обязательным? , Могут ли они возникнуть где-нибудь? Какова минимальная длина?
Показать ещё 2 комментария
Теги:

2 ответа

1
Лучший ответ

Вы можете использовать это регулярное выражение:

^(?=.*?[\w$#@-])[\w .$#@-]{1,255}$

Здесь (?=.*?[\w$#@-]) является положительным взглядом, который гарантирует, что один символ будет одним из символов [\w$#@-].

Также я использовал \w (символ слова), который эквивалентен [a-zA-Z0-9_]

1

Вероятно, вы захотите попробовать что-то вроде:

Pattern p = Pattern.compile("^[\\w\\d ._#$@-]{1,255}$");

Ваша проблема с остальными символами #, $ и @ может возникнуть из-за того, что вы добавили их в класс символов после дефиса (-), тем самым запутав компилятор о том, пытаетесь ли вы добавить диапазон.

Полный пример

String[] valid = {
        "abc 12345",
        "abc12345",
        "abc.ert.trs.123",
        "abc.bcv.trs",
        "abc.trt#trs",
         "a",
        "a$",
        "$a#",
        "1234$",
        "567#",
      "test  123 #"
};
Pattern p = Pattern.compile("^[\\w\\d ._#$@-]{1,255}$");
for (String s: valid) {
    Matcher m = p.matcher(s);
    System.out.printf("\"%s\" is valid? %b %n", s, m.matches());

}

Вывод

"abc 12345" is valid? true 
"abc12345" is valid? true 
"abc.ert.trs.123" is valid? true 
"abc.bcv.trs" is valid? true 
"abc.trt#trs" is valid? true 
"a" is valid? true 
"a$" is valid? true 
"$a#" is valid? true 
"1234$" is valid? true 
"567#" is valid? true 
"test  123 #" is valid? true 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню