Regex израз за намиране на низ, който има един @ и не трябва да започва с . или завършете с

Израз Regex за намиране на низ, който има едно @ и не трябва да започва с . или да завършва с . Значение hello@Same е валидно .hello@Same, hello@Same. и hello@sdj@same всички са невалидни

Какъв е проблемът в (^([^@]+)@([^@])+$)(^[^\\.].*$)(^.*[^\\.]$).

Всички тези три части работят поотделно, но когато ги съберем заедно, не работят


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
По принцип ... Това, което искам да знам, е мога ли да кажа, че един израз трябва да съвпада с (patternA) && (patternB) && (patternC) и всеки от шаблоните може да бъде оценен индивидуално на израз .. всеки шаблон трябва да има собствено начало на ред символ и символ за край на реда ... В горния пример ... patternA оценява само @ и patternB до не започва с . и след това patternC до не завършва с . .Всички работят поотделно добре как да комбинирате и трите на едно място?   -  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

Това HttpClient на Apache ли е? Ако е така, изненадан съм, че съдържанието не е кеширано. Това изглежда като наистина лош избор на дизайн от тяхна страна... както можете да видите, очевидно причинява на потребителите на техния API много ненужна скръб.
person Community    schedule 24.02.2012
comment
Тези изрази позволяват няколко знака @ (напр. @boo@boo@). Освен това, защо използвате [^@]|\w+ (или един знак, който не е @, или една или повече буквено-цифрови знаци)? Това не е част от спецификациите на OP. =) - person Jens; 24.02.2012
comment
@Jens - Поправен е първоначалният проблем, но сега има друг (в момента не позволява периоди). Ще го погледна отново утре сутринта. Започвам да разбирам какво имате предвид, че това е лош начин за валидиране на имейл адреси. 8) - person ; 24.02.2012