包含所有特殊字符的正则表达式模式

我想写一个简单的正则表达式来检查给定字符串中是否存在任何特殊字符。我的正则表达式工作,但我不知道为什么它也包括所有的数字,所以当我把一些数字它返回一个错误。

我的代码:

//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!");
}
653944 次浏览

You have a dash in the middle of the character class, which will mean a character range. Put the dash at the end of the class like so:

[$&+,:;=?@#|'<>.^*()%!-]

请不要这样做... 像这样的小 Unicode BABY ANGEL正在死亡!Something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something something

而你正在扼杀20年的 DOS: (最后一个笑脸被称为 WHITE SMILING FACE... 现在它在 263A... 但在古代它是 ALT-1)

还有他的朋友

现在是 263B... 但在古代是 ALT-2

试试阴性匹配:

Pattern regex = Pattern.compile("[^A-Za-z0-9]");

(这将确定只有 A-Z“标准”字母和“标准”0-9数字。)

由于你的字符类中没有空格和下划线,我认为下面的正则表达式会对你更好:

Pattern regex = Pattern.compile("[^\w\s]");

Which means match everything other than [A-Za-z0-9\s_]

Unicode 版本:

Pattern regex = Pattern.compile("[^\p{L}\d\s_]");

这是因为您的模式包含 .-^,它是介于 .^之间的所有字符,包括数字和其他几个字符,如下所示:

enter image description here

如果你说的特殊字符是指标点和符号使用:

[\p{P}\p{S}]

包含 都是 Unicode标点符号。

If you only rely on ASCII characters, you can rely on using the hex ranges on the ASCII table. Here is a regex that will grab all special characters in the range of 33-47, 58-64, 91-96, 123-126

[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]

但是,您可以将特殊字符视为 没有普通字符。如果我们采取这种方法,你可以简单地这样做

^[A-Za-z0-9\s]+

如何这将不会赶上 _ ^和可能其他人。

试试:

(?i)^([[a-z][^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]]*)$

表示正则表达式 A不区分大小写。

表示从 az的任何字母字符。

[^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]: represents any alphabetic character except a to z, digits, and special characters i.e. accented characters.

[[a-z][^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]]: 仅表示任何字母(重音或非重音)字符。

*: 正则表达式之前的一个或多个匹配项。

使用这个正则表达式模式(“ ^ [ a-zA-Z0-9] * $”)

(^ W $)

^-字符串的开始, 匹配任何非单词字符[ ^ a-zA-Z0-9 _ ] , $ - end of the string

尝试使用相同的东西-StringUtils.isAlphanumeric(value)

Here is my regex variant of a special character:

String regExp = "^[^<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[¿§«»ω⊙¤°℃℉€¥£¢¡®©0-9_+]*$";

(Java 代码)

我们可以通过使用如下模式和匹配器来实现这一点:

Pattern pattern = Pattern.compile("[^A-Za-z0-9 ]");
Matcher matcher = pattern.matcher(trString);
boolean hasSpecialChars = matcher.find();

下面是我的正则表达式,我用它来删除任何字符串中的所有特殊字符:

String regex = ("[ \\\\s@  [\\\"]\\\\[\\\\]\\\\\\\0-9|^{#%'*/<()>}:`;,!& .?_$+-]+")

请用这个. . 这是最简单的。

\p{Punct} Punctuation: One of !"#$%&'()*+,-./:;<=>?@[]^_`{|}~

Https://docs.oracle.com/javase/7/docs/api/java/util/regex/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("");

For people (like me) looking for an answer for special characters like Ä etc. just use this pattern:

  • 只有文字(或空格) : “[ A-Za-zÀ-something ]”

  • 文字和数字: “[ A-Za-zÀ-something 0-9]”

  • 文本,数字和一些特殊的字符: “[ A-Za-zÀ-something 0-9() ,-_. ,]”

正则表达式仅从 ascii 索引开始,并检查字符串的一个字符是否位于两个索引中[ startindex-endindex ]。

所以你可以添加任何范围。

最终,您可以使用一个方便的工具: https://regexr.com/

祝你好运;)

我已经定义了一种模式来查找除了字母数字之外的范围在032到126之间的任何 ASCII 特殊字符。你可以使用下面这样的方法:

要找到任何特殊字符:

[ -\/:-@\[-\`{-~]

要找到任意计数的最小值和最大值:

(?=.*[ -\/:-@\[-\`{-~]{1,})

这些模式具有介于032至047、058至064、091至096和123至126之间的特殊字符。

你可以使用否定匹配:

Pattern regex = Pattern.compile("([a-zA-Z0-9])*"); (对于零个或多个字符)

或者

Pattern regex = Pattern.compile("([a-zA-Z0-9])+"); (对于一个或多个字符)

Try this. It works on C# it should work on java also. If you want to exclude spaces just add \s in there @"[^\p{L}\p{Nd}]+"

To find any number of special characters use the following regex pattern: ([^(A-Za-z0-9 )]{1,})

[ ^ (A-Za-z0-9)]这意味着除了字母、数字和空格之外的任何字符。 {1,0}这意味着上一个块的一个或多个字符。

使用此选项可捕获不包括 .-_的常见特殊字符。

/[!"`'#%&,:;<>=@{}~\$\(\)\*\+\/\\\?\[\]\^\|]+/

如果你也想包含 .-_,那么使用这个:

/[-._!"`'#%&,:;<>=@{}~\$\(\)\*\+\/\\\?\[\]\^\|]+/

如果希望筛选 URL 友好且不包含任何特殊字符或空格的字符串,请使用以下方法:

/^[^ !"`'#%&,:;<>=@{}~\$\(\)\*\+\/\\\?\[\]\^\|]+$/

当你使用像 /[^A-Za-z0-9]/这样的模式时,你就会开始捕捉一些特殊的字母,比如其他语言的字母和一些带有欧洲口音的字母(比如 é,í)。

我在下面使用 reg 来查找字符串中的特殊字符

var reg = new RegExp("[`~!@#$%^&*()\\]\\[+={}/|:;\"\'<>,.?-_]");

一个包含所有特殊字符的小补充,如: ūĀ:

举个例子:

Pattern regex = Pattern.compile("[A-Za-zÀ-ÖØ-öø-ū]");

Shout out to 穆罕默德・尤瑟夫 's solution!

我们可以使用范围匹配所有32个特殊字符。

[!-\/:-@[-`{-~]

第一组

[!-\/]

  • 匹配 ASCII 码从33到47:
  • !"#$%&'()*+,-./

——32个字符中有15个匹配

第二组

[:-@]

  • 匹配 ASCII 码从58到64:
  • 翻译: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇芳校对: 奇

——32个字符中有7个匹配

第三组

[[-`]

  • Match ASCII code from 91 to 96:
  • [\]^_`

——32个字符中有6个匹配

第四组

[{-~]

  • 匹配 ASCII 码从123到126:
  • {|}~

——32个字符中有4个匹配

总共匹配回所有32个字符(15 + 7 + 6 + 4)

参考文献

特殊字符表 _ 排列

扩展的 ASCII 表