regex java允许数字、字母、特殊字符(有些)

cbwuti44  于 2021-06-26  发布在  Java
关注(0)|答案(3)|浏览(357)

我有一个文件名,比如upload 23_3.jpg。我只允许使用字母、(.)句点、()半音符号、下划线

Pattern p = Pattern.compile("[^a-z0-9_.]", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(i.getFileName());

boolean specialCharFound = m.find(); //this will return true if any other characters are found

^意思不是a-z,字母,我加了uu和,。但不起作用。知道如何添加''''.'-'字符吗?

7uzetpgm

7uzetpgm1#

不知道“^”在做什么。我想你应该把它去掉。
你需要用斜杠转义特殊字符。我认为只有“.”应该逃走,而且不需要逃走。
尝试:[a-z0-9.-.]
如果-和\u对不区分大小写有问题,请考虑pattern.unicode\u大小写。或者考虑no case标志并添加a-z。
try:[a-za-z0-9.-.],没有案例

tnkciper

tnkciper2#

您可以直接在character类的末尾添加这些字符。

Pattern p = Pattern.compile("[^a-z0-9_. -]", Pattern.CASE_INSENSITIVE);
wpx232ag

wpx232ag3#

使用 Pattern.compile("[\\w\\s.-]+")m.matches() :

Pattern p = Pattern.compile("[\\w\\s.-]+");
Matcher m = p.matcher(i.getFileName());
boolean isValid = m.matches();

参见正则表达式证明。
解释

[\w\s.-]+                any character of: word characters (a-z, A-
                           Z, 0-9, _), whitespace (\n, \r, \t, \f,
                           and " "), '.', '-' (1 or more times
                           (matching the most amount possible))

相关问题