正则表达式允许特定的特殊字符

时间:2015-07-16 19:24:14

标签: java regex validation special-characters

我目前正在验证用户名输入,我必须验证是否允许将某些特殊字符插入到输入中。

白色字符列表是:

$#+{}:?.,~@"和空格

Black Listed字符是:

^$;\-()<>|='%_

验证应允许任何带有一个或多个特殊字符和空格的字母数字字符。它也适用于黑名单案例。无论如何都可以。

我有这个:

public static boolean alphNum(String value) {
    Pattern p = Pattern.compile("^[\\w ]*[^\\W_][\\w ]*$");
    Matcher m = p.matcher(value);
    return m.matches();
}

仅用于字母数字字符和空格,但现在也希望允许特定的特殊字符列表。

以下是我需要允许的类型的一些示例:

  • 名1 $
  • Name1#Name2
  • Name1 Name2
  • 姓名2
  • 姓名1姓名......

我已经看过很多正则表达式验证,但没有一个具体,如果有人能帮我解决这个问题,我真的很感激。

3 个答案:

答案 0 :(得分:3)

如果没有诸如&#34之类的限制;必须以字母开头#34;或者&#34;必须包含至少一个字母&#34; (你的问题没有指明任何),并假设通过&#34;白色空格&#34;你的意思是一个空格,而不是制表符,换行符等,那么表达式就是:

Pattern.compile("^[\\$#\\+{}:\\?\\.,~@\"a-zA-Z0-9 ]+$");

请注意,这个正则表达式只允许一个空格,或者一个用户名与另一个空格相同,除了尾随空格的数量等等。如果你想要更加严格一些,并从字母开始强制执行或者数字(例如),你可以这样做:

Pattern.compile("^[a-zA-Z0-9][\\$#\\+{}:\\?\\.,~@\"a-zA-Z0-9 ]+$");

答案 1 :(得分:1)

使用此模式,允许不在黑名单上的字符。

"[^^;\\-()<>|='%_]+"

第一个^表示 NOT 以下任何字符。在你澄清$是好还是坏之前,我将其视为一个好人。

代码示例:

public static void main(String[] args) throws Exception {
    List<String> userNames = new ArrayList() {{
        add("Name1$");          // Good
        add("Name1# Name2");    // Good
        add("Name1 Name2");     // Good
        add("Name Name2");      // Good
        add("Name1 Name");      // Good
        add("UserName$");       // Good
        add("UserName^");       // Bad
        add("UserName;");       // Bad
        add("User-Name");       // Bad
        add("User_Name");       // Bad
    }};
    Pattern pattern = Pattern.compile("[^^;\\-()<>|='%_]+");

    for (String userName : userNames) {
        if (pattern.matcher(userName).matches()) {
            System.out.println("Good Username");
        } else {
            System.out.println("Bad Username");
        }
    }
}

结果:

Good Username
Good Username
Good Username
Good Username
Good Username
Good Username
Bad Username
Bad Username
Bad Username
Bad Username

答案 2 :(得分:0)

public class Patteren {
       private static final Pattern specialChars_File = Pattern.compile("[a-zA-Z0-9-/.,:+\\s]*");

     //CASE-1 : Allow only charaters specifed, here im aloowiing ~ '
      private static final Pattern specialCharsRegex_Name = Pattern.compile("[a-zA-Z0-9~']*");

      //.CASE-2: Dont Allow specifed charaters, here im not aloowiing < >
      private static final Pattern specialCharRegex_Script = Pattern.compile("[<>]");

 public static void main(String[] args) {

     if (!specialCharsRegex_Name.matcher("Satya~").matches()) {
       System.out.println("InValid....Error message here ");
     }

     if (specialCharRegex_Script.matcher("a").find()) {
       System.out.println("SCript Tag ... Error Message");
     }
   }
 }