2013-06-04 2 views

ответ

4

Нет необходимости в регулярных выражениях:

bool allOk = str.Split(';').All(email => email.Count(c => c == '@') == 1); 

Хотя это может привести к erronous результатам ([email protected]_foo.com не действительный адрес электронной почты!)

+0

будет работать, даже если у вас есть @; @; @; ... –

+0

@FelicePollano True, но «@ один раз в каждом письме» - это спецификация, данная OP. Чтобы полностью проверить электронную почту, он может использовать регулярное выражение с регулярным выражением + или регулярное выражение. – SimpleVar

+1

Да, но ОП попросил, чтобы проверить, если все слова содержат [@.] Один раз в слове_, и я ответил на вопрос. –

1

Я не думаю, что RegEx является необходимым, но вот модель я бы использование; \b[a-zA-Z0-9][email protected][a-zA-Z0-9]+\b

\b - граница слова, тогда у меня есть алфавитно-цифровой набор символов. + означает одно или несколько вхождений предыдущего символа. Таким образом, это говорит по границе слова, он может иметь 0 или более любого символа, следующего за символом @, затем снова один или несколько из любых буквенно-цифровых символов, за которыми следует граница слова.

+0

Я хочу использовать это выражение в javascript. «\ b. * @. * \ b» неверно, поскольку он не проверяет «[email protected] test». – Reno

+0

Не было бы. * Также соответствует границе, такой как пространство или;? –

+1

@Reno соответствует совпадению «[email protected]», почему он должен соответствовать некоторому случайному слову после окончания адреса электронной почты? Если это то, что вы хотите, сделайте вместо символа конечного символа слова вместо этого разделителя, который, как представляется, будет полутолько. И да, вы можете захотеть заменить '. *' На некоторый набор символов, за которым следует '*' like '[a-zA-Z0-9] *' – evanmcdonnal

-2

Если вам нужен электронный валидатор, попробуйте это регулярное выражение:

[A-Za-Z0-9 -] {1} @ ([A-Za-Z.]) [А? -zA-Z] {1} [A-Za-Z] {1,4}

+0

Это выглядит не так. Он соответствует 'a @ .b.c' – SimpleVar

+0

, вы правы. Исправлено: [a-zA-Z0-9 -] {1,} @ ([a-zA-Z])? [a-zA-Z] {1,} \. [a-zA-Z] {1, 4} – jsfviky

+0

Символ '-' разрешен в письмах? Я знаю, что '_' есть, и, возможно, даже' .' ... Вы можете сократить [a-zA-Z0-9_] 'с' \\ w', btw. – SimpleVar

1

Вы можете попробовать:.

[_a-zA-Z0-9-][email protected][_.a-zA-Z0-9-^;]+;? 

, что некоторые голец следуют @ плюс некоторый полукокса не ';' а затем необязательный; look at the demo here.

+0

Это будет соответствовать '! @ #', Что соответствует «123» со сдвигом, кстати, и не является электронным адресом. – SimpleVar

+0

@YoryeNathan правильно, мы можем уточнить. + Часть –

+0

Теперь это не соответствует 'a_b @ xyz' - Не уверен, что OP хочет поддерживать электронные письма с двумя точками (например, [email protected]), но подчеркивание определенно разрешено. – SimpleVar

0

Эта простая вариация ответа @jsfviky «s позволяет периодов и дефисов в адрес электронной почты как на уровне домена и локальной части, а также знак плюс для одноразового использования адресов типа электронной почты:

[a-zA-Z0-9-\.\+]{1,}@(?:[a-zA-Z])[a-zA-Z\.-]{1,}.[a-zA-Z]{1,4} 

Реально это все, что вам нужно, но действительные адреса электронной почты могут содержать любой из !#$%&'*+-/=?^_ {|} ~ `, поэтому вы можете изменить его в зависимости от случаев использования.

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