Регулярное выражение для идентификатора пользователя

#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:

Вы можете использовать это регулярное выражение:

 ^(?!\d $)\w{8,20}$
  

Рабочая демонстрация

Ответ №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());
}