用于验证名称的以下案例的正则表达式模式

时间:2014-08-11 08:24:30

标签: java regex

我已经为以下用例编写了模式

您可以使用大写和小写字母,数字和_,连字符,#,$,@符号

名称长度最多为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 #

2 个答案:

答案 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_]