Подтвердить что ты не робот

Шаблон регулярных выражений, включая все специальные символы

Я хочу написать простое регулярное выражение, чтобы проверить, существует ли в данной строке какой-либо специальный символ. Мое регулярное выражение работает, но я не знаю, почему оно также включает все числа, поэтому, когда я ставлю какое-то число, оно возвращает ошибку.

Мой код:

//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!");
}
4b9b3361

Ответ 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.