Изначально у меня было требование проверить, соответствует ли данная строка двум шаблонам.
"^(.{1,5})?$"
- предназначен для проверки, имеет ли строка длину до 5 символов."[!-~]|([!-~][ -~]*[!-~])"
-Это означает, что строка не начинается и не заканчивается пробелами.
Раньше мы должны были отправлять два разных сообщения, когда строка не соответствовала ни одному, поэтому я поступил так, как показано ниже:
Pattern pattern1 = Pattern.compile("^(.{1,5})?$");
Pattern pattern2 = Pattern.compile("[!-~]|([!-~][ -~]*[!-~])");
Matcher matcher1=pattern1.matcher(" verify");
Matcher matcher2 = pattern2.matcher("verify");
System.out.println("Message1 - " + matcher1.matches());
System.out.println("Message2 - " + matcher2.matches());
Но теперь требуется следующее: - Нам нужно объединить оба вышеуказанных паттерна, НО
- Также укажите, что строка может содержать следующие символы $, #, @, кроме букв, числа
- И передайте одно-единственное сообщение.
Я просмотрел много похожих вопросов, например: регулярное выражение без пробелов в начале и в конце, но разрешено в середине и https://regex101.com/, чтобы создать одно регулярное выражение, например:
Pattern pattern3=Pattern.compile(
"^[^\\\s][[-a-zA-Z0-9-()@#$]+(\\\s+[-a-zA-Z0-9-()@#$]+)][^\\\s]{1,50}$");
Но регулярное выражение работает неправильно. Если я предоставлю строку с символом, отличным от указанного в регулярном выражении, например «%», она должна была завершиться неудачно, но она прошла.
Я пытаюсь выяснить, в чем проблема в приведенном выше регулярном выражении или в любом новом регулярном выражении, которое может удовлетворить потребность.
@edit для большей ясности: Допустимый ввод: "Hell @"
Недействительный ввод: "Hell" (имеет пробел @beginning)
Недопустимый ввод: "Hell%" не обязательны для символов char '%'
Hello@
имеет 6 символов, но вы упомянули, что разрешено только до 5? - person anubhava   schedule 19.01.2019