Před chvílí jsem dal a Kontrola síly hesla pomocí JavaScriptu a regulárních výrazů. Ve stejné poznámce můžete také zkontrolovat strukturu e-mailové adresy pomocí stejné metodiky regulárního výrazu (regex).
Pokud váš formulářový prvek má id = ”emailaddress” a přidáte formulář onSubmit = ”návrat checkEmail ();„, Toto je funkce Javascript, kterou můžete použít k vrácení upozornění, pokud má e-mailová adresa platnou strukturu nebo ne:
function checkEmail() { var email = document.getElementById('emailaddress'); var filter = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; if (!filter.test(email.value)) { alert('Please provide a valid email address'); email.focus; return false; } }
Funkce ověří obsah e-mailu na obsah filtru. Pokud se porovnání nezdaří, objeví se upozornění a vrátí fokus zpět do pole e-mailové adresy!
U formulářů s více e-mailovými adresami by bylo dobré udělat class = ”emailaddress”. Pokud máte knihovnu prototype.js (http://www.prototypejs.org) na stránce můžete udělat něco takového:
var valid = true;
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
$$ ('. emailaddress'). each (function (email) {
if (! filter.test (email.value)) {
upozornění (? Uveďte platnou e-mailovou adresu?);
email.focus;
platný = nepravda;
}
});
návrat platný;
Díky Ade! Budu se muset naučit něco víc o třídách a JavaScriptu!
Dougův původní příklad byl skvělý, ale tento je mrazivý! Nevěděl jsem, že tímto způsobem můžete zpracovávat prvky, které mají třídu, a funkční syntaxe je sladká.
Ade a jeho tým jsou úžasní!
Pěkné, vždy se na vás můžu spolehnout u některých zlých super skriptů! 🙂
Díky Tony!
Tato myšlenka se mi líbí, ale váhal bych s přijetím tohoto konkrétního regulárního výrazu bez popisu, které legální e-mailové adresy nepřijímá a které nelegální adresy povoluje.
Příklad regulárního výrazu, který dělá slušnou práci, spolu s vysvětlením, které případy nezahrnuje, naleznete v tomto:
http://www.regular-expressions.info/email.html
Moje osobní preference je pokrýt většinu jednoduchých případů a vydat varování před všemi ostatními, místo toho, abych to odmítl. Pokud Bob opravdu chce, podej se bob@com.museum spíše než bob@museum.com, proč ho nenechat?
Ahoj Reg,
Regex můžete vyzkoušet pomocí Online tester regexu.
Určitě je toho možné udělat mnohem více, pokud si chcete zajistit emailová adresa je platný v souladu s RFC.
Existuje několik důvodů, proč někomu nedovolit zadat neplatnou e-mailovou adresu:
1. Budou na vás naštvaní, když e-mail, který očekávali, nedostane - bez ohledu na to, zda to byla vaše chyba, byla adresa zadána nesprávně.
2. Pokud byla com.museum platnou doménou a řekněme Yahoo! provozoval - jakákoli e-mailová adresa, která se odrazila, by měla negativní dopad na reputaci vaší společnosti pro doručování e-mailů. To by mohlo vést k zablokování všech e-mailů vaší společnosti.
3. Pokud vám to poskytovatel e-mailových služeb umožnil bob@com.museum, zaplatili byste také za každý e-mail odeslaný na tuto e-mailovou adresu, dokud tuto adresu neodhlásí z důvodu okamžitých opuštění. Vyhnul bych se jakémukoli ESP, který by umožňoval takovou neplatnou e-mailovou adresu - prostě berou vaše peníze!
Děkujeme za zastavení!
Doug
Perfektní, přesně to, co jsem potřeboval!
Existuje mnohem jednodušší způsob, jak napsat výraz:
var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
- U finálního modifikátoru / i není třeba označovat rozsah velkých písmen.
- O žádném nevím TLD s čísly v něm.
Na vedlejší poznámku povoluji TLD s až 6 znaky; nové přicházejí pravidelně a nikdy nevíte (no, některé budoucí mohou mít dokonce čísla, já vím).
Ahoj,
Snažím se to použít ve stávající podobě v reálném čase, ale nezdá se, že by se to ověřovalo v reálném čase, jako je vaše kontrola síly hesla ...
Nebo jsem jen tak bezradný a nefunguje to pro mě?
btw, opravdu se mi líbí, o co tu jdeš, tvé výukové programy jsou velmi jednoduché, určitě si tento přidám do záložek….
Jen FYI; Nezkoušel jsem řešení Ade, ale výše uvedený vzor neověřuje e-mailové adresy s apostrofy v nich .. (např. Mike.O'Hare@Whatever.com). Apostrofy jsou platné podle RFC 2821/2822 -> http://www.faqs.org/rfcs/rfc2822.html
HTH,
Sanjay
Nezdá se, že by zpracovával znak plus, který je platný.
Viz: http://www.dominicsayers.com/isemail/
V širším smyslu jde o klíčový problém s vyjímáním a vkládáním kódu, který si zaslouží celou diskusi sám o sobě.
@ robbyslaughter.com
jsi nutz ..
to funguje dobře ..! @
Bylo by v pořádku, kdybychom našli řešení, jak se vyhnout falešným e-mailovým adresám v komentářích na WordPress
Jen malá oprava: Regulární výraz má na konci znak extra () +. Mělo by se číst:
^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$
S první z nich by byly přijaty libovolné délky TLD (což není skutečně špatné, jak zdůraznili ostatní, ale pokud by to byl záměr, výraz by mohl být zkrácen).
Můžete vysvětlit regulární výraz tohoto kódu a jak funguje? Také o .test - Je .test výchozí příkaz v JavaScriptu pro kontrolu věcí, jako jste to udělali ve výše uvedeném kódu?
Toto je krátký kód pro e-mailový výraz -
funkce validateEmail (id)
{
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
vrátit emailPattern.test (id);
}
Deepak Rai
varanasi
Toto je krátký kód pro e-mailový výraz -
funkce validateEmail (id)
{
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
vrátit emailPattern.test (id);
}
Deepak Rai
varanasi
Díky moc strýčku. To mi hodně pomohlo 🙂
Amanda
děkuji za kód!
Díky, ale v tomto regulárním výrazu je chyba. Nejsem odborník na regex, ale zkusil jsem e-mail:
test @ test
a to prošlo regexem ... všiml jsem si, že mu chybí únik z „.“ tak by to mělo být:
/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/
Valím se s
/^\\w+( [ /
a co .info?
sakra ... před 3 lety? : S
To je jen hrubá kontrola, ale ne 100% přesná, například s tím by bylo v pořádku john_doe. @ gmail.com což ve skutečnosti není platná e-mailová adresa (tečka není povolena jako poslední znak v místní části e-mailu).
Také by to přijalo john…doe@gmail.com což je také neplatné, protože v sekvenci nemůže být více než jedna tečka.
To jsou jen některé nedostatky, které jsem si všiml na první pohled.
Mým záměrem není napadat, jen abych na to upozornil v případě, že to někdo plánuje použít jako bezpečnostní kontrolu - není dostatečně zabezpečený.
Informace o platných e-mailových adresách naleznete zde: http://en.wikipedia.org/wiki/E-mail_address
Deepak,
Vlastně si myslím, že pro tečku musíte použít únik („.“). Vaše funkce by tedy měla být místo toho:
funkce validateEmail (id)
{
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
vrátit emailPattern.test (id);
}
Jinak by tečka znamenala „jakýkoli znak“. Věřím, že těmto zvláštním postavám je třeba uniknout.
Pozdravy,
Federico
funkce validateEmail (fld) {
var error = ””;
var tfld = trim (fld.value); // hodnota pole s oříznutými mezerami
var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
var nelegálníChars = / [(),;: \ ”[]] /;
if (fld.value == „Zadejte svou e-mailovou adresu“) {
error = “Zadejte svou e-mailovou adresu.n”;
} else if (! emailFilter.test (tfld)) {// otestovat e-mail na nelegální znaky
error = “Zadejte platnou e-mailovou adresu.n”;
} else if (fld.value.match (legalChars)) {
error = “Zadejte platnou e-mailovou adresu.n”;
}
chyba návratu;
}
funkce validateEmail (fld) {
var error = ””;
var tfld = trim (fld.value); // hodnota pole s oříznutými mezerami
var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
var nelegálníChars = / [(),;: \ ”[]] /;
if (fld.value == „Zadejte svou e-mailovou adresu“) {
error = “Zadejte svou e-mailovou adresu.n”;
} else if (! emailFilter.test (tfld)) {// otestovat e-mail na nelegální znaky
error = “Zadejte platnou e-mailovou adresu.n”;
} else if (fld.value.match (legalChars)) {
error = “Zadejte platnou e-mailovou adresu.n”;
}
chyba návratu;
}
funkce validateEmail (fld) {
var error = ””;
var tfld = trim (fld.value); // hodnota pole s oříznutými mezerami
var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
var nelegálníChars = / [(),;: \ ”[]] /;
if (fld.value == „Zadejte svou e-mailovou adresu“) {
error = “Zadejte svou e-mailovou adresu.n”;
} else if (! emailFilter.test (tfld)) {// otestovat e-mail na nelegální znaky
error = “Zadejte platnou e-mailovou adresu.n”;
} else if (fld.value.match (legalChars)) {
error = “Zadejte platnou e-mailovou adresu.n”;
}
chyba návratu;
}
funkce validateEmail (fld) {
var error = ””;
var tfld = trim (fld.value); // hodnota pole s oříznutými mezerami
var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
var nelegálníChars = / [(),;: \ ”[]] /;
if (fld.value == „Zadejte svou e-mailovou adresu“) {
error = “Zadejte svou e-mailovou adresu.n”;
} else if (! emailFilter.test (tfld)) {// otestovat e-mail na nelegální znaky
error = “Zadejte platnou e-mailovou adresu.n”;
} else if (fld.value.match (legalChars)) {
error = “Zadejte platnou e-mailovou adresu.n”;
}
chyba návratu;
}
funkční lemování
{
vrátit s.replace (/ ^ s + | s + $ /, ”);
}
funkční lemování
{
vrátit s.replace (/ ^ s + | s + $ /, ”);
}
'.Focus' je funkce, měla by být:
email.focus ()
'.Focus' je funkce, měla by být:
email.focus ()
děsivý
Funguje jako drahokam .. Skvělé využití výrazů reg v JavaScriptu ...
Je to prasklina v drahokamu ...
Bude přijata adresa „mmm @ mmm..com“. Ale dvě tečky dohromady nejsou platné.
Chlapi, použijte. Nevyžaduje žádné ověření JS.
Funguje však pouze s moderními prohlížeči. Svět se bohužel zatím nedohnal. -
Odesláno ze schránky pro iPhone