Regex для сопоставления строк, содержащих буквы, цифры и @ - PullRequest
0 голосов
/ 15 марта 2019

Мне нужно регулярное выражение для сопоставления букв, цифр и, возможно, @ и. (Это не адреса электронной почты)

Match:

mirs99milo
kiapp98@dot.com

Несоответствие:

Устройство
99987

Иногда строка начинается со специального символа в начале, в этом случае символ следует пропустить и получить строку, например:

-mirs99milo -> Игнорировать "-" и совпадать только с mirs99milo
-kiapp98@dot.com -> Игнорировать "-" и совпадать только kiapp98@dot.com

У меня уже есть это:

(? =. \ w) (? =. [A-Za-z]) [\ w] {1,10}

, который прекрасно работает, за исключением случаев, когда строка имеет "@"

https://regex101.com/r/bHUCaX/3

Любая помощь очень ценится. Спасибо.

Ответы [ 3 ]

0 голосов
/ 15 марта 2019

попробуйте это (? =. \ г) (? =. [A-Za-Z]) [. @ A-Za-z0-9] {1,20}

0 голосов
/ 15 марта 2019

Поскольку ваше требование неясно, вот мое предположение, основанное на вашем вопросе:

Вы хотите убедиться, что строка:

  1. должна содержать хотя бы одну цифру и вхотя бы один алфавит
  2. Строка должна содержать только буквенно-цифровые символы, @ и .
  3. Игнорировать первый символ в соответствии

Если это требование, тоВы можете использовать:

^(?=.*\d)(?=.*[a-zA-Z]).?[\da-zA-Z@.]+$

Это должно позволить вам проверить, соответствует ли входная строка вашему формату.

Однако, если вы хотите получить совпадающую строку в случае ее соответствияи, исключая первый специальный символ, если он существует, вы можете сделать

^(?=.*\d)(?=.*[a-zA-Z]).??([\da-zA-Z@.]+)$

Группа 1 - это то, что вам нужно

Объяснение регулярного выражения:

^                                           start of line
 (?=.*\d)                                   look-ahead: at least a digit
         (?=.*[a-zA-Z])                     look-ahead: at least a alphabet
                       .??                  optional one any char, 
                                              reluctant match
                          (             )   matching group
                           [\da-zA-Z@.]+    1-or-more occurrence of 
                                               digits,alphabet, @ and dot
                                         $  end of line

Regex101 Demo (на основе демоверсии Ника)

0 голосов
/ 15 марта 2019

Вам просто нужно добавить @ и . к набору символов, которые вам соответствуют:

(?=.*\d)(?=.*[A-Za-z])[\dA-Za-z@.]+

Демонстрация на regex101.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...