正则表达验证文本,其中包含条件中的某些特殊字符

时间:2015-03-03 09:26:53

标签: java regex

我正在尝试创建一个验证文本的正则表达式。条件如下:

  1. 必须至少包含一个字母数字字符[A-Za-z0-9]

  2. 可以包含允许的特殊字符,如[@#]。这是可选的。

  3. 除上述字符[includes @和#]外,不允许使用其他字符。
  4. 文字长度应小于8。
  5. 有效文字:A,A @,@ A,A @ a @,@@ @ a等

    文字无效: @,@#,a:**,A @%,AAAAAAAAA(9个字符)等

    我已尝试过以下正则表达式,但它部分有效:

    (适用?= [\ W])(?=。 [@#])?。* {0,8}

4 个答案:

答案 0 :(得分:1)

^(?=.*[a-zA-Z0-9])[A-Za-z0-9@#]{0,8}$

试试这个。看demo.

lookahead将确保至少有one个字符。

答案 1 :(得分:0)

matches方法中使用以下正则表达式。

"(?=.*?[A-Za-z0-9])[A-Za-z0-9@#]{1,8}"

(?=.*?[A-Za-z0-9])断言字符串必须包含至少一个字母或数字,因此匹配中必须存在单个字符。这就是我定义[A-Za-z0-9@#]{1,8}而不是[A-Za-z0-9@#]{0,8}

的原因
String[] check = {"A", "A@", "@A", "A@a@", "@@@a", "@", "@#", "a:**", "A@%", "AAAAAAAAA"};
for(String i: check)
{

    System.out.println(i.matches("(?=.*?[A-Za-z0-9])[A-Za-z0-9@#]{1,8}"));
}

<强>输出:

true
true
true
true
true
false
false
false
false
false

答案 2 :(得分:0)

您可以使用:

^(?=.*?[A-Za-z0-9])[@#A-Za-z0-9]{1,8}$

答案 3 :(得分:0)

您可以尝试这样的正则表达式:

public static void main(String[] args) {
    String s = "aaaaaaa";
    System.out.println(s.matches("(?=.*[A-Za-z0-9])[A-Za-z0-9@#]{1,7}"));
}

O / P: 真