Как проверить, что строка содержит разрешенные символы - PullRequest
1 голос
/ 01 июля 2019

Я хочу проверить, что строка содержит только буквы, цифры и следующие специальные символы: "-", "!", "?", "&", "(", ")", ":", "#"

Я пытался изменить, но безуспешно:

/^(?=.*[0-9])[- \*\?!:#+()0-9]+$/

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Я полагаю, исходя из вашего разработанного выражения, возможно, вы захотите иметь выражение, такое как:

^(?=.*[0-9])(?=.*[A-Za-z])(?=.*[*?!:#+()\s-])[A-Za-z0-9*?!:#+()\s-]+$

, которое должно разрешать цифры, буквы и специальные символы, или, возможно, нет, котороетогда это выражение, которое позволяет space:

^[A-Za-z0-9*?!:#+()\s-]+$

или это,

^[A-Za-z0-9*?!:#+()-]+$

, которое не допускает места, может просто подойти.


В этой демонстрации , если вам это интересно, объясняется выражение.

Пример

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "^(?=.*[0-9])(?=.*[A-Za-z])(?=.*[*?!:#+()\\s-])[A-Za-z0-9*?!:#+()\\s-]+$";
final String string = "123\n"
     + "abc\n"
     + "?!*\n"
     + "123abc?!*\n"
     + "123  abc?!*";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}
1 голос
/ 01 июля 2019

Ваше регулярное выражение находится на правильном пути, но вы должны просто поместить все символы в один класс символов:

/^[A-Za-z0-9!?&():#-]+$/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...