#java #regex
#java #регулярное выражение
Вопрос:
Я новичок в регулярных выражениях.
У меня есть требование написать регулярное выражение со следующими критериями
- Идентификатор пользователя не может быть полностью числовым
- Идентификатор пользователя не может содержать специальных символов
- Минимальная длина 8 символов
- Максимальная длина 20 символов
- Может быть все алфавитное
- Может быть буквенно-цифровым
Я написал следующее выражение, но оно не работает
^[a-zA-Z\d*]{8,20}$
Комментарии:
1. Каким образом это не работает? Что это за сообщение об ошибке? Чем результат отличается от того, что вы ожидаете?
2. если я ввожу ввод как «aaaaaaaa123», он возвращает true, фактический вывод должен быть false .
3. Почему
aaaaaaaa123
должно быть false?4. извините, ввод «aaaaaaaa123» должен возвращать true, но для моего регулярного выражения он возвращает false.
Ответ №1:
Вы можете использовать это:
(?i)^(?=.*[a-z])[a-z0-9]{8,20}$
Посмотрите демонстрацию того, что работает, а что терпит неудачу
(?i)
делает его нечувствительным к регистру^
утверждает, что мы находимся в начале строки- предварительный просмотр
(?=.*[a-z])
проверяет, что у нас есть хотя бы одна буква [a-z0-9]{8,20}
соответствует от 8 до 20 букв или цифр (буквы также могут быть прописными)$
утверждает, что мы достигли конца строки
Комментарии:
1. регулярное выражение, которое вы дали, хорошо работает на Java, но в JavaScript оно терпит неудачу.
2. Да,
(?i)
не существует в JS. Чтобы установить режим без учета регистра в JS, сделайте это следующим образом:/^(?=.*[a-z])[a-z0-9]{8,20}$/i
Ответ №2:
Ответ №3:
Попробуйте с этим кодом и проверьте:
public static void main(String[] args) {
Pattern pattern = Pattern.compile("^(?!\d $)\w{8,20}$");
Matcher matcher = pattern.matcher("Tryurcode4u");
System.out.println("Input String matches regex - " matcher.matches());
}