2016-09-16 4 views
-1

Я пытаюсь использовать регулярное выражение для проверки адресов электронной почты, одно из правил для адресов электронной почты заключается в том, что они могут иметь необязательное число перед знаком «@». Однако, когда программа получает эту оценку, число никогда не является обязательным.Проверка адреса электронной почты для необязательного номера

я в настоящее время:

Regex.IsMatch(user.EmailAddress, Regex.Escape(basicExpected) + @"^\d{1}?$" + "@email.com") 

basicExpected является string basicExpected = user.GivenName + "." + user.Surname;

поэтому адрес электронной почты должен быть

first.last {опция number}@email.com

В качестве данных dumby два примера ле являются:

Второй John Doe получает 2, потому что есть два человека в Active Directory с именем Джон Доу, таким образом, число является маскирующей разницей между ними. Когда оценка побежал [email protected] будет определяться как ошибочный из-за отсутствия ряда

Update: Я сделал ошибку чтения $, как ? так \d? правильно, я просто продолжал искажения. Я прошу прощения за свою ошибку, и я благодарю вас за сохраняющихся в поиске решения

+1

Remove '^' и '$' якорей. '" \ D?«' достаточно. Также есть период до '@'. Он не соответствует формату. – revo

+0

Я не могу придумать экземпляр, где '{1}' понадобится. Предыдущий символ/группа уже был сопоставлен один раз. @revo правильно относится к якорям, предположим, что они соответствуют началу и концу строки. – chris85

+0

@revo Я переключился на «\ d?», но оставил @, это не требуется в asp? – BlueBarren

ответ

1

Ваша проблема заключается в том, что ваш квантор не указывает, что число не является обязательным, он говорил, что это ленивый вместо жадные.

\d{1}? # this is incorrect 

Необязательно один номер в регулярном выражении проще построить. Попробуйте это:

\d? # this is preferable 
+0

Hrm, похоже, вы и я написали один и тот же ответ дважды подряд в одно и то же время, я удалю мой :) –

+0

Я пробовал \ d? и оценка все равно вернет false с моими фиктивными данными, t есть номер. – BlueBarren

+0

Вы пробовали без линейных якорей (т. '^' и '$')? – wpcarro

0

Если я правильно прочитали то, что я объяснил:

first.last{optional number}@email.com должно сопровождаться

user.GivenName + "." + user.Surname + "^\d{1}?$" + "[email protected]" 

Я вижу, что некоторые вопросы здесь:

  • в "^\d{1}?$": ^ и $ подразумевают начало и конец. Вы не хотите этого, потому что у вас есть другие вещи вокруг него.
  • ". @ Email.com": почему 1-я точка .?

Вывод:

"\d?" является то, что вы хотите для условного номера и удаления . перед тем @ email.com может помочь

+0

Таким образом, '.' перед' @ email.com' был случайным, он был удален сейчас. Теперь я использую '' \ d? "', Но безрезультатно, он все равно не сработает. – BlueBarren

Смежные вопросы