Java-正则表达式模式,包括所有特殊字符
我想编写一个简单的正则表达式来检查给定字符串中是否存在任何特殊字符。 我的正则表达式可以正常工作,但我不知道为什么它还包括所有数字,因此当我输入一些数字时会返回错误。
我的代码:
//pattern to find if there is any special character in string
Pattern regex = Pattern.compile("[$&+,:;=?@#|'<>.-^*()%!]");
//matcher to find if there is any special character in string
Matcher matcher = regex.matcher(searchQuery.getSearchFor());
if(matcher.find())
{
errors.rejectValue("searchFor", "wrong_pattern.SearchQuery.searchForSpecialCharacters","Special characters are not allowed!");
}
Piotr Sagalara asked 2020-06-17T11:17:42Z
15个解决方案
129 votes
请不要这样做...像这样的小Unicode婴儿天使快要死了! ◕◡◕(←这些不是图像)(箭头也不是!)
☺并且您正在杀死20年的DOS:-)(最后一个笑脸称为WHITE SMILING FACE ...现在是263A ...但是在远古时代是ALT-1)
和他的朋友
☻黑色笑脸...现在是263B ...但是在古代它是ALT-2
尝试否定匹配:
Pattern regex = Pattern.compile("[^A-Za-z0-9]");
(只有A-Z“标准”字母和“标准”数字可以。
xanatos answered 2020-06-17T11:18:21Z
21 votes
在字符类的中间有一个破折号,这意味着一个字符范围。 将破折号放在课程末尾,如下所示:
[$&+,:;=?@#|'<>.^*()%!-]
Jerry answered 2020-06-17T11:18:43Z
19 votes
这是因为您的模式包含一个.-^,该字符是.和^之间(包括.和^)的所有字符,其中包括数字和其他几个字符,如下所示:
如果使用特殊字符,则表示标点符号和符号使用:
[\p{P}\p{S}]
其中包含所有Unicode标点和符号。
Sina Iravanian answered 2020-06-17T11:19:12Z
13 votes
因为您的字符类中没有空格和下划线,所以我认为遵循正则表达式会更好:
Pattern regex = Pattern.compile("[^\w\s]");
这意味着匹配所有[A-Za-z0-9\s_]
Unicode版本:
Pattern regex = Pattern.compile("[^\p{L}\d\s_]");
anubhava answered 2020-06-17T11:19:41Z
3 votes
如果仅依靠ASCII字符,则可以依靠使用ASCII表上的十六进制范围。 这是一个正则表达式,它将捕获_、^、91-96、123-126范围内的所有特殊字符
[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]
但是,您可以将特殊字符视为非常规字符。 如果我们采用这种方法,则只需执行此操作
^[A-Za-z0-9\s]+
但是,这不会捕获_ ^以及其他可能捕获的东西。
Serguei Fedorov answered 2020-06-17T11:20:10Z
3 votes
尝试:
(?i)^([[a-z][^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\\\-\\=\\!\\_]]*)$
(?i)^(A)$:表示正则表达式A不区分大小写。
*:代表a至z之间的任何字母字符。
*:表示除a至z666外的任何字母字符,数字和特殊字符(即带重音符号的字符)。
*:表示任何仅字母(带重音或无重音)字符的字符。
*:在它之前的一个或多个正则表达式。
cdaiga answered 2020-06-17T11:20:52Z
3 votes
使用此正则表达式模式(“ ^ [a-zA-Z0-9] * $”)。它将验证不包含特殊字符的字母数字字符串
sam answered 2020-06-17T11:21:12Z
3 votes
这是我的特殊字符的regex变体:
String regExp = "^[^<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[¿§«»ω⊙¤°℃℉€¥£¢¡®©0-9_+]*$";
(Java代码)
Chuck answered 2020-06-17T11:21:37Z
3 votes
请使用此..这是最简单的。
\ p {Punct}标点:!“#$%&'()* +,-。/ :; <=>?@ [] ^ _`{|}〜之一
[HTTPS://docs.Oracle.com/Java色/7/docs/API/Java/UT IL/热个性/pattern.HTML]
StringBuilder builder = new StringBuilder(checkstring);
String regex = "\\p{Punct}"; //Special character : `~!@#$%^&*()-_+=\|}{]["';:/?.,><
//change your all special characters to ""
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(builder.toString());
checkstring=matcher.replaceAll("");
Energy answered 2020-06-17T11:22:05Z
2 votes
尝试将其用于相同的事情-StringUtils.isAlphanumeric(value)
Ash answered 2020-06-17T11:22:25Z
2 votes
对于像我这样的人,寻找诸如Ä等特殊字符的答案,只需使用以下模式:
仅文本(或空格):“ [A-Za-zÀ-ȕ]”
文字和数字:“ [A-Za-zÀ-ȕ0-9]”
文字,数字和一些特殊字符:“ [[A-Za-zÀ-ȕ0-9(),-_。,]”
正则表达式仅从ascii索引开始,并检查字符串的字符是否在两个索引[startindex-endindex]中。
因此,您可以添加任何范围。
最终,您可以使用一个方便的工具:[https://regexr.com/]
祝好运;)
John Schellingerhout answered 2020-06-17T11:23:15Z
1 votes
这是我的正则表达式,用于删除任何字符串中的所有特殊字符:
String regex = ("[ \\\\s@ [\\\"]\\\\[\\\\]\\\\\\\0-9|^{#%'*/}:`;,!& .?_$+-]+")
Suchismita Barik answered 2020-06-17T11:23:36Z
0 votes
(^ \ $ W)
^-字符串的开头,\ W-匹配任何非单词字符[^ a-zA-Z0-9_],$-字符串结尾
Sareesh Krishnan answered 2020-06-17T11:24:00Z
0 votes
我们可以使用Pattern和Matcher如下实现:
Pattern pattern = Pattern.compile("[^A-Za-z0-9 ]");
Matcher matcher = pattern.matcher(trString);
boolean hasSpecialChars = matcher.find();
KayV answered 2020-06-17T11:24:20Z
0 votes
我定义了一个模式来查找除字母数字外的032至126之间的任何ASCII特殊字符。 您可以使用以下类似的方法:
查找任何特殊字符:
(?=.*[ -\/:-@\[-\`{-~]{1,})
要查找最小值1和最大值的任何计数:
(?=.*[ -\/:-@\[-\`{-~]{1,})
这些模式的特殊字符范围为032至047、058至064、091至096和123至126。
Mohamed Yusuff answered 2020-06-17T11:25:02Z