Шаблон регулярных выражений, включая все специальные символы
Я хочу написать простое регулярное выражение, чтобы проверить, существует ли в данной строке какой-либо специальный символ. Мое регулярное выражение работает, но я не знаю, почему оно также включает все числа, поэтому, когда я ставлю какое-то число, оно возвращает ошибку.
Мой код:
//pattern to find if there is any special character in string
Pattern regex = Pattern.compile("[$&+,:;[email protected]#|'<>.-^*()%!]");
//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!");
}
Ответы
Ответ 1
Пожалуйста, не делайте этого... маленький Unicode BABY ANGEL, как этот, 👼 умирают! ◕◡◕ (← это не изображения) (и не стрелка!)
☺
И вы убиваете 20 лет DOS:-) (последний смайлик называется WHITE SMILING FACE... Теперь он на 263A... Но в древности это был ALT-1)
и его друг
☻
BLACK SMILING FACE... Теперь это на 263B... Но в древние времена это был ALT-2
Попробуйте отрицательное соответствие:
Pattern regex = Pattern.compile("[^A-Za-z0-9]");
(это будет только A-Z "стандартные" буквы и "стандартные" цифры.
Ответ 2
У вас есть тире в середине класса символов, что будет означать диапазон символов. Поместите тире в конец класса следующим образом:
[$&+,:;[email protected]#|'<>.^*()%!-]
Ответ 3
Это потому, что ваш шаблон содержит .-^
, который является всеми символами между .
и ^
, включая цифры и несколько других символов, как показано ниже:
![enter image description here]()
Если по специальным символам вы имеете в виду знаки препинания и символы, используйте:
[\p{P}\p{S}]
который содержит все символы и символы символа unicode.
Ответ 4
SInce у вас нет белого пробела и подчеркивания в вашем классе символов. Думаю, следующее регулярное выражение будет лучше для вас:
Pattern regex = Pattern.compile("[^\w\s]");
Что означает соответствие всем, кроме [A-Za-z0-9\s_]
Версия Unicode:
Pattern regex = Pattern.compile("[^\p{L}\d\s_]");
Ответ 5
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class detectspecial{
public int getSpecialCharacterCount(String s) {
if (s == null || s.trim().isEmpty()) {
System.out.println("Incorrect format of string");
return 0;
}
Pattern p = Pattern.compile("[^A-Za-z0-9]");
Matcher m = p.matcher(s);
// boolean b = m.matches();
boolean b = m.find();
if (b == true)
System.out.println("There is a special character in my string ");
else
System.out.println("There is no special char.");
return 0;
}
}
Ответ 6
Если вы полагаетесь только на символы ASCII, вы можете положиться на использование шестнадцатеричных диапазонов в таблице ASCII. Вот регулярное выражение, которое будет захватывать все специальные символы в диапазоне 33-47
, 58-64
, 91-96
, 123-126
[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]
Однако вы можете думать о специальных символах как о ненормальных символах. Если мы примем такой подход, вы можете просто сделать это
^[A-Za-z0-9\s]+
При этом это не поймает _
^
и, возможно, другие.
Ответ 7
Try:
(?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\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]]
: представляет любые символы только буквенного (акцентированного или несоответствующего характера).
*
: одно или несколько появлений регулярного выражения, которое предшествует ему.
Ответ 8
Используйте этот шаблон регулярного выражения ( "^ [a-zA-Z0-9] * $" ). Он проверяет буквенно-цифровую строку, исключая специальные символы
Ответ 9
Вот мой вариант регулярного выражения специального символа:
String regExp = "^[^<>{}\"/|;:.,[email protected]#$%^=&*\\]\\\\()\\[¿§«»ω⊙¤°℃℉€¥£¢¡®©0-9_+]*$";
(код Java)
Ответ 10
Пожалуйста, используйте это.. это самое простое.
\p {Punct} Пунктуация: одна из! "# $% & '() * +, -./:; <=>? @[] ^ _' {|} ~
https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
StringBuilder builder = new StringBuilder(checkstring);
String regex = "\\p{Punct}"; //Special character : '[email protected]#$%^&*()-_+=\|}{]["';:/?.,><
//change your all special characters to ""
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(builder.toString());
checkstring=matcher.replaceAll("");
Ответ 11
Попробуйте использовать это для одних и тех же вещей - StringUtils.isAlphanumeric(value)
Ответ 12
Вот мое регулярное выражение, которое я использовал для удаления всех специальных символов из любой строки:
String regex = ("[ \\\\[email protected] [\\\"]\\\\[\\\\]\\\\\\\0-9|^{#%'*/<()>}:';,!& .?_$+-]+")
Ответ 13
Для людей (таких как я), ищущих ответ для специальных символов, таких как Ä и т.д., Просто используйте этот шаблон:
-
Только текст (или пробел): "[A-Za-zÀ-ȕ]"
-
Текст и цифры: "[A-Za-zÀ-ȕ0-9]"
-
Текст, цифры и некоторые специальные символы: "[A-Za-zÀ-ȕ0-9(), -_.,]"
Regex просто начинается с индекса ascii и проверяет, находится ли символ строки в обоих индексах [startindex-endindex].
Таким образом, вы можете добавить любой диапазон.
В конце концов вы можете поиграть с удобным инструментом: https://regexr.com/
Удачи;)
Ответ 14
(^\W $)
^ - начало строки,
\ W - сопоставить любой символ без слова [^ a-zA-Z0-9_],
$ - конец строки
Ответ 15
Мы можем достичь этого, используя Pattern и Matcher следующим образом:
Pattern pattern = Pattern.compile("[^A-Za-z0-9 ]");
Matcher matcher = pattern.matcher(trString);
boolean hasSpecialChars = matcher.find();
Ответ 16
Я определил один шаблон для поиска любых специальных символов ASCII в диапазоне от 032 до 126, кроме буквенно-цифровых символов. Вы можете использовать что-то вроде приведенного ниже:
Чтобы найти любой специальный символ:
[ -\/:[email protected]\[-\'{-~]
Чтобы найти минимум 1 и максимум любого количества:
(?=.*[ -\/:[email protected]\[-\'{-~]{1,})
Эти шаблоны имеют специальные символы в диапазоне от 032 до 047, от 058 до 064, от 091 до 096 и от 123 до 126.