我已经为以下用例编写了模式
您可以使用大写和小写字母,数字和_,连字符,#,$,@符号
名称长度最多为255个字符。 至少一个字符shld是必填字母或数字_,连字符,#,$,@
我提出了正则表达式^[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 :(得分: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
答案 1 :(得分:1)
您可以使用此正则表达式:
^(?=.*?[\w$#@-])[\w .$#@-]{1,255}$
此处(?=.*?[\w$#@-])
是一个正向前瞻,可确保至少有一个字符是[\w$#@-]
个字符之一。
此外,我使用的\w
(单词字符)等同于[a-zA-Z0-9_]