Регулярное выражение для проверки имени пользователя с префиксом символа - PullRequest
0 голосов
/ 05 декабря 2018

Требования: Мне нужно поставить InputFilter на EditText, который принимает поле с определенными ограничениями:

  1. должен принимать только [a-zA-Z0-9._]
  2. @ может быть или не быть первым символом (мне нужно добавить @ в качестве префикса к имени)
  3. может начинаться только с буквенно-цифрового [a-zA-Z0-9], а не с [._]

В настоящее время я использую:

String regEx="[@]?(([a-zA-Z0-9]{0,1})?)+[a-zA-Z0-9._]*";

Но он принимает [._] в качестве первого символа.

Может кто-нибудь помочь мне в этом?

Пример: Ввод: - Mack -> Затем onTextChange я добавляю @ в качестве префикса, который не должен быть обязательным -> @ Mack

Теперь, когда я удаляю символ один из изeditText для каждого оставшегося значения удаления текста должен проходить через RegEx.С предложением Wiktor Stribiżew я не могу обнаружить после @M.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Часть ([a-zA-Z0-9]{0,1})? в вашем шаблоне соответствует необязательному буквенно-цифровому символу (1 или 0 вхождений) 1 или 0 раз.Это означает, что он может совпадать с пустой строкой.

Смысл здесь в том, чтобы сначала сопоставить необязательный @, а затем использовать необязательную последовательность шаблонов: буквенно-цифровой символ с последующим 0+ буквенно-цифровым символом, . или_:

@?(?:[a-zA-Z0-9][a-zA-Z0-9._]*)?

Поскольку весь вход должен быть согласован, нет необходимости использовать ^ и $ якоря.

Подробности

  • @? - необязательный @
  • (?:[a-zA-Z0-9][a-zA-Z0-9._]*)? - необязательная группа без захвата, соответствующая последовательности шаблонов:
    • [a-zA-Z0-9] - буквенно-цифровой символ
    • [a-zA-Z0-9._]* - 0 или более буквенно-цифровых символов, . или _.

См. regex demo .

0 голосов
/ 05 декабря 2018

Я думаю, что это должно помочь вам:

String regEx="@?(?:[a-zA-Z0-9][a-zA-Z0-9._]*)?"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...