我想编写一个简单的正则表达式来检查给定字符串中是否存在任何特殊字符。我的正则表达式有效,但我不知道为什么它也包含所有数字,所以当我输入一些数字时它会返回错误。
我的代码:
//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!");
}
答案 0 :(得分:117)
请不要这样做......像这样的小Unicode BABY ANGEL正在死亡! ◕◡◕(←这些不是图像)(也不是箭头!)
和他的朋友
尝试否定匹配:
Pattern regex = Pattern.compile("[^A-Za-z0-9]");
(这只能是A-Z“标准”字母和“标准”数字。
答案 1 :(得分:19)
这是因为您的模式包含.-^
,其中包含.
和^
之间的所有字符,其中包括数字和其他几个字符,如下所示:
如果使用特殊字符,则表示标点符号和符号使用:
[\p{P}\p{S}]
包含所有unicode 标点和符号。
答案 2 :(得分:19)
你在字符类的中间有一个短划线,这意味着一个字符范围。将破折号放在类的末尾,如下所示:
[$&+,:;=?@#|'<>.^*()%!-]
答案 3 :(得分:13)
你的角色类中没有空格和下划线我认为跟随正则表达式对你更好:
Pattern regex = Pattern.compile("[^\w\s]");
这意味着匹配[A-Za-z0-9\s_]
Unicode版本:
Pattern regex = Pattern.compile("[^\p{L}\d\s_]");
答案 4 :(得分:4)
使用它来捕获除 .-_
之外的常见特殊字符。
/[!"`'#%&,:;<>=@{}~\$\(\)\*\+\/\\\?\[\]\^\|]+/
如果您还想包含 .-_
,请使用:
/[-._!"`'#%&,:;<>=@{}~\$\(\)\*\+\/\\\?\[\]\^\|]+/
如果要过滤 URL 友好且不包含任何特殊字符或空格的字符串,请使用:
/^[^ !"`'#%&,:;<>=@{}~\$\(\)\*\+\/\\\?\[\]\^\|]+$/
当您使用 /[^A-Za-z0-9]/
等模式时,您将开始捕捉其他语言的特殊字母和一些欧洲重音字母(如 é、í)。
答案 5 :(得分:3)
尝试:
(?i)^([[a-z][^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]]*)$
(?i)^(A)$
:表示正则表达式A
不区分大小写。
[a-z]
:代表从a
到z
的任何字母字符。
[^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]
:表示除a
到z
之外的任何字母字符,数字和特殊字符,即重音字符。
[[a-z][^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]]
:代表任何字母(重音或非重音)字符。
*
:在它之前出现一个或多个正则表达式。
答案 6 :(得分:3)
使用此正则表达式模式(&#34; ^ [a-zA-Z0-9] * $&#34;)。它验证不包括特殊字符的字母数字字符串
答案 7 :(得分:3)
这是我的特殊字符的正则表达式变体:
String regExp = "^[^<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[¿§«»ω⊙¤°℃℉€¥£¢¡®©0-9_+]*$";
(Java代码)
答案 8 :(得分:3)
请使用它。。这是最简单的。
\ p {Punct}标点:!“#$%&'()* +,-。/ :; <=>?@ [] ^ _`{|}〜
之一
scuevals_api/resources/students.py
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("");
答案 9 :(得分:3)
如果您只依赖ASCII字符,则可以依赖ASCII表上的十六进制范围。这是一个正则表达式,可以抓取33-47
,58-64
,91-96
,123-126
[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]
但是,您可以将特殊字符视为不是普通字符。如果我们采用这种方法,你可以简单地做到这一点
^[A-Za-z0-9\s]+
Hower这不会抓住_
^
,也可能抓住其他人。
答案 10 :(得分:1)
尝试将其用于相同的事情 - StringUtils.isAlphanumeric(value)
答案 11 :(得分:1)
这是我的正则表达式,用于删除任何字符串中的所有特殊字符:
String regex = ("[ \\\\s@ [\\\"]\\\\[\\\\]\\\\\\\0-9|^{#%'*/<()>}:`;,!& .?_$+-]+")
答案 12 :(得分:0)
(^ \ W $)
^ - 字符串的开头, \ W-匹配任何非单词字符[^ a-zA-Z0-9_], $ - 结束字符串
答案 13 :(得分:0)
我们可以使用Pattern和Matcher来实现此目标,如下所示:
Pattern pattern = Pattern.compile("[^A-Za-z0-9 ]");
Matcher matcher = pattern.matcher(trString);
boolean hasSpecialChars = matcher.find();
答案 14 :(得分:0)
对于像我这样的特殊字符寻找答案的人(如我),只需使用以下模式:
仅文本(或空格):“ [A-Za-zÀ-ȕ]”
文本和数字:“ [A-Za-zÀ-ȕ0-9]”
文本,数字和一些特殊字符:“ [A-Za-zÀ-ȕ0-9(),-_。,]”
Regex只是从ascii索引开始,并检查字符串的字符是否在两个索引[startindex-endindex]中。
因此您可以添加任何范围。
最终,您可以使用便捷的工具:https://regexr.com/
祝你好运;)
答案 15 :(得分:0)
我定义了一个模式来查找除字母数字外的032至126之间的任何ASCII特殊字符。您可以使用类似以下的内容:
要查找任何特殊字符:
[ -\/:-@\[-\`{-~]
要查找最小值1和最大值的任何计数:
(?=.*[ -\/:-@\[-\`{-~]{1,})
这些模式的特殊字符在032至047、058至064、091至096和123至126之间。
答案 16 :(得分:0)
您可以使用否定匹配项:
Pattern regex = Pattern.compile("([a-zA-Z0-9])*");
(用于零个或多个字符)
或
Pattern regex = Pattern.compile("([a-zA-Z0-9])+");
(用于一个或多个字符)
答案 17 :(得分:0)
尝试一下。它适用于C#,也应适用于Java。如果要排除空格,只需在其中添加\ s
@"[^\p{L}\p{Nd}]+"
答案 18 :(得分:-1)
要查找任意数量的特殊字符,请使用以下正则表达式模式: ([[^(A-Za-z0-9)] {1,})
[^(A-Za-z0-9)]表示除字母,数字和空格之外的任何字符。 {1,0}表示上一个区块的一个或多个字符。