我目前正在验证用户名输入,我必须验证允许将某些特殊字符插入到输入中。
字符的白名单是:
$#+{}:?.,~@"
和空格
黑名单字符是:
^$;\-()<>|='%_
验证应允许带有一个或多个特殊字符和空格的任何字母数字字符。它也可以与黑名单一起工作,无论哪种方式都可以。
我有这个:
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/