Выражение Regex для поиска строки, которая имеет один @ и не должна начинаться с. или закончить

Выражение Regex для поиска строки с одним @, которая не должна начинаться с . или заканчиваться на . Значение hello @ То же верно .hello @ То же, привет @ То же. и hello @ sdj @ тоже недействительны

В чем проблема в (^([^@]+)@([^@])+$)(^[^\\.].*$)(^.*[^\\.]$).

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


person user1230217    schedule 24.02.2012    source источник
comment
Хороший комментарий по теме: stackoverflow.com/a/1076589/966590   -  person Andrew Logvinov    schedule 24.02.2012
comment
Почему бы вам не разрешить несколько @s или отсутствие начальной точки? Оба могут быть действительными в адресах электронной почты.   -  person Jens    schedule 24.02.2012
comment
В основном ... Я хочу знать, могу ли я сказать, что выражение должно соответствовать (шаблонA) && (шаблонB) && (шаблонC), и каждый шаблон может быть оценен индивидуально по выражению .. каждый шаблон должен иметь собственное начало строки символ и символ конца строки ... В приведенном выше примере ... patternA оценивает только @, а patternB не начинается с. а затем шаблонC to не заканчивается на. Все работает по отдельности хорошо, как совместить все три в одном месте?   -  person user1230217    schedule 24.02.2012
comment
И выражение, имеющее значение patternA && patternB, равно (?=patternA)patternB   -  person Jens    schedule 24.02.2012


Ответы (3)


Вы не можете просто объединить регулярные выражения, если хотите сопоставить их все.

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

Регулярное выражение, соответствующее вашим спецификациям, будет

^(?=[^@]+@[^@]+$)[^.].*[^.]$

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

person Jens    schedule 24.02.2012

У вас есть несколько символов начала строки ^ и несколько символов конца строки $ в вашем регулярном выражении.

person Dervall    schedule 24.02.2012

^([^.@]+)@([^.@]+)$

Чтобы разбить его на более управляемые части:

^([^.@]+)  // Start with anything except . or @
@          // @ must be somewhere in the expression
([^.@]+)$  // End with anything except . or @

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

person Community    schedule 24.02.2012
comment
Это выражение допускает использование нескольких знаков @ (например, @ boo @ boo @). Кроме того, почему вы используете [^ @] | \ w + (либо один символ, отличный от @, либо один или несколько буквенно-цифровых символов)? Это не входит в спецификации OP. знак равно - person Jens; 24.02.2012
comment
@Jens - Исправлена ​​исходная проблема, но теперь есть другая (в настоящее время не допускает периодов). Я посмотрю на это снова завтра утром. Я начинаю понимать, что вы имеете в виду, говоря, что это плохой способ проверки адресов электронной почты. 8) - person ; 24.02.2012