Я написал схему для следующего варианта использования
Вы можете использовать буквы верхнего и нижнего регистра, цифры и символы _, дефис, #, $, @
Длина имен должна быть не более 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 #
Вы можете использовать это регулярное выражение:
^(?=.*?[\w$#@-])[\w .$#@-]{1,255}$
Здесь (?=.*?[\w$#@-])
является положительным взглядом, который гарантирует, что один символ будет одним из символов [\w$#@-]
.
Также я использовал \w
(символ слова), который эквивалентен [a-zA-Z0-9_]
Вероятно, вы захотите попробовать что-то вроде:
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
_ # $ @
обязательным? , Могут ли они возникнуть где-нибудь? Какова минимальная длина?