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

标签 java regex validation special-characters

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

字符的白名单是:

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

黑名单字符是:

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

验证应允许带有一个或多个特殊字符和空格的任何字母数字字符。它也可以与黑名单一起工作,无论哪种方式都可以。

我有这个:

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

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

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

  • 姓名 1$
  • 名字 1# 名字 2
  • 名字 1 名字 2
  • 姓名2
  • 姓名 1 姓名...

我见过很多正则表达式验证,但没有一个如此具体,如果有人能帮我解决这个问题,我将不胜感激。

最佳答案

如果没有诸如“必须以字母开头”或“必须包含至少一个字母”(您的问题未指定任何字母)之类的限制,并假设“空格”是指空格,但是不是制表符、换行符等,那么表达式就是:

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

请注意,此正则表达式允许诸如仅一个空格或与另一个相同的用户名(尾随空格数除外)等内容,如果您想要更严格一些并强制以字母开头或数字(例如),你可以这样做:

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

关于java - 允许特定特殊字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31462832/

相关文章:

java - Servlet 线程处理

Java:if、else 和 return

sql - 如何使用 regexp_substr 提取包名称

ruby-on-rails-3 - 上传前对 Rails 中的文件大小进行自定义验证

java - 通过sshj杀死一个进程

c# - 使用正则表达式比较两个字符串

javascript - 如何使用匹配和正则表达式返回变量的内容?

c++ - if 语句不比较我的字符串 c++ 中的数值

c# - 如何使用 DI 通过 IValidatableObject 接口(interface)向实体提供验证器?

java - 颠覆 NoClassFoundDefError