For et stykke tid siden satte jeg en Password Strength Checker ved hjælp af JavaScript og regulære udtryk. På den samme note kan du også kontrollere strukturen på en e-mail-adresse ved hjælp af den samme regulære udtryk (regex) metode.
Hvis dit formularelement har id = ”e-mail-adresse” og du tilføjer en formular onSubmit = ”return checkEmail ();“, Dette er en Javascript-funktion, som du kan bruge til at returnere en advarsel, hvis e-mail-adressen har en gyldig struktur eller ej:
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; } }
Funktionen validerer indholdet af e-mailen til filterets. Hvis sammenligningen mislykkes, popper den op en advarsel og returnerer fokus tilbage til e-mail-adressefeltet!
For formularer med flere e-mail-adresser ville det være godt at gøre class = ”emailaddress”. Hvis du har prototype.js-biblioteket (http://www.prototypejs.org) inkluderet på siden kan du gøre noget som dette:
var gyldig = sand;
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
$$ ('. e-mail-adresse'). hver (funktion (e-mail) {
hvis (! filter.test (email.value)) {
alarm (? Angiv en gyldig e-mail-adresse?);
e-mail. fokus;
gyldig = falsk;
}
});
returnering gyldig
Tak Ade! Jeg bliver nødt til at lære mere om klasser og JavaScript!
Dougs originale eksempel var sejt, men det fryser! Jeg vidste ikke, at du kunne behandle elementer, der har en klasse på denne måde, og den funktionelle syntaks er sød.
Ade og hans team er fantastiske!
Dejligt, jeg kan altid stole på dig for nogle onde seje manuskripter! 🙂
Tak Tony!
Jeg kan godt lide ideen, men jeg vil være tøvende med at vedtage netop dette regulære udtryk uden beskrivelse af, hvilke lovlige e-mail-adresser den ikke accepterer, og hvilke ulovlige adresser den tillader.
For et eksempel på et regulært udtryk, der gør et anstændigt job sammen med en forklaring på, hvilke sager det ikke dækker, se dette:
http://www.regular-expressions.info/email.html
Min personlige præference er at dække de fleste af de enkle sager og udsende en advarsel for alt andet end at afvise det. Hvis Bob virkelig ønsker at indsende bob@com.museum snarere end bob@museum.com, hvorfor ikke lade ham?
Hej Reg,
Du kan teste Regex ved hjælp af en Online Regex Tester.
Der er også bestemt meget mere, der kan gøres, hvis du vil sikre en e-mail adresse er gyldig i overensstemmelse med RFC.
Der er et par grunde til ikke at tillade nogen at indtaste en ugyldig e-mail-adresse:
1. De bliver irriterede på dig, når den e-mail, de forventede, ikke kommer igennem - uanset om det var din skyld, blev adressen indtastet forkert.
2. Hvis com.museum var et gyldigt domæne, og lad os sige, Yahoo! betjente det - enhver e-mail-adresse, der hoppede, ville have en negativ indvirkning på din virksomheds ry for e-mail-levering. Dette kan føre til, at al din virksomheds e-mail bliver blokeret.
3. Hvis din e-mail-tjenesteudbyder tillod dig at komme ind bob@com.museum, ville du også betale for hver e-mail, der sendes til den e-mail-adresse, indtil de afmeldte den adresse på grund af afvisninger. Jeg vil undgå enhver ESP, der tillader en ugyldig e-mail-adresse sådan - de tager bare dine penge!
Tak for at stoppe forbi!
Doug
Perfekt, lige hvad jeg havde brug for!
Der er meget enklere måde at skrive udtrykket på:
var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
- Med den endelige modifikator / i er der ingen grund til at angive store bogstaver.
- Jeg kender ikke nogen TLD med tal i.
På en sidebemærkning tillader jeg TLD med op til 6 tegn; nye ankommer regelmæssigt, og du ved aldrig (godt, nogle fremtidige kan måske endda have tal i det, jeg ved).
Hej der,
Jeg prøver at bruge dette i en eksisterende form i realtid, men dette ser ikke ud til at valideres i realtid ligesom din adgangskontrolstyrkekontrol ...
Eller er jeg bare så clueless, og det fungerer ikke for mig?
btw, jeg kan virkelig godt lide det, du foregår her, dine tutorials er meget enkle, jeg vil helt sikkert bogmærke denne….
Bare en FYI; Jeg har ikke prøvet Ades løsning, men mønsteret ovenfor validerer ikke e-mail-adresser med apostrofer i dem (f.eks. Mike.O'Hare@Whatever.com). Apostrofer er gyldige i henhold til RFC 2821/2822 -> http://www.faqs.org/rfcs/rfc2822.html
HTH,
Sanjay
Det ser heller ikke ud til at håndtere plustegnet, som er gyldigt.
Se: http://www.dominicsayers.com/isemail/
På en større note er dette et nøgleproblem med at klippe og indsætte kode, en der fortjener en fuld diskussion i sig selv.
@ robbyslaughter.com
du er nød ...
det fungerer fint ..! @
Det ville være fint, hvis vi kunne finde en løsning til at undgå falske e-mail-adresser på kommentarer på WordPress
Bare en lille korrektion: Det regulære udtryk har et ekstra () + i slutningen. Den skulle lyde:
^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$
Med den første ville enhver lang længde accepteres (hvilket ikke er iboende forkert, som andre har påpeget, men hvis det var hensigten, kunne udtrykket forkortes).
Kan du venligst forklare det regulære udtryk for denne kode, og hvordan den fungerer? Også om .test - Er .test en standarderklæring i javascript for at kontrollere ting som du gjorde i koden ovenfor?
Dette er en kort kode til e-mail-udtryk-
funktion validateEmail (id)
{
var emailPattern = /^ [aa-ZA-Z0-9._- ]+@ [aa-zA-Z0-9.- ]+. [aa-zA-Z] {2,4 $ /;
returner emailPattern.test (id);
}
Deepak Rai
Varanasi
Dette er en kort kode til e-mail-udtryk-
funktion validateEmail (id)
{
var emailPattern = /^ [aa-ZA-Z0-9._- ]+@ [aa-zA-Z0-9.- ]+. [aa-zA-Z] {2,4 $ /;
returner emailPattern.test (id);
}
Deepak Rai
Varanasi
Mange tak onkel. Det hjalp mig meget 🙂
Amanda
tak for koden!
Tak, men der er en fejl i denne regex. Jeg er ikke en regex-ekspert, men jeg prøvede e-mail:
test @ test
og det passerede regex ... Jeg bemærkede, at det mangler at undslippe "." sådan skal det være:
/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/
Jeg ruller med
/^\\w+( [\\.-]? /
og hvad med .info's?
åh lort ... 3 år siden? : S
Nå, dette er bare en grov kontrol, men ikke 100% nøjagtig, for eksempel ville dette være okay med john_doe. @ gmail.com hvilket faktisk ikke er en gyldig e-mail-adresse (punktum er ikke tilladt som sidste tegn i lokal del af e-mail).
Også det ville acceptere john…doe@gmail.com hvilket også er ugyldigt, da der ikke kan være mere end en prik i en sekvens.
Dette er blot nogle fejl, jeg bemærkede ved første øjekast.
Min hensigt er ikke at basere bare for at påpege dette, hvis nogen planlægger at bruge dette som sikkerhedskontrol - ikke sikkert nok.
For information om gyldige e-mail-adresser, se dette: http://en.wikipedia.org/wiki/E-mail_address
Deepak,
Faktisk tror jeg, du skal bruge en flugt til prikken (“.”). Så din funktion skal i stedet være:
funktion validateEmail (id)
{
var emailPattern = /^ [aa-ZA-Z0-9._- ]+@ [aa-zA-Z0-9.- ]+. [aa-zA-Z] {2,4 $ /;
returner emailPattern.test (id);
}
Ellers ville prikken betyde "enhver karakter". Jeg tror, at sådanne specialtegn skal undslippes.
Hilsen,
Federico
funktion validateEmail (fld) {
var fejl = ””;
var tfld = trim (fld.værdi); // værdi af felt med hvidt mellemrum trimmet fra
var emailFilter = /^ [^ @] + @ [^^.] +. [^@] *ww$/;
var illegalChars = / [(),;: \ ”[]] /;
hvis (fld.value == “Indtast din e-mail-adresse”) {
error = “Indtast venligst din e-mail-adresse. n”;
} ellers hvis (! emailFilter.test (tfld)) {// test e-mail for ulovlige tegn
error = “Indtast venligst en gyldig e-mail-adresse. n”;
} ellers hvis (fld.value.match (illegalChars)) {
error = “Indtast venligst en gyldig e-mail-adresse. n”;
}
returfejl
}
funktion validateEmail (fld) {
var fejl = ””;
var tfld = trim (fld.værdi); // værdi af felt med hvidt mellemrum trimmet fra
var emailFilter = /^ [^ @] + @ [^^.] +. [^@] *ww$/;
var illegalChars = / [(),;: \ ”[]] /;
hvis (fld.value == “Indtast din e-mail-adresse”) {
error = “Indtast venligst din e-mail-adresse. n”;
} ellers hvis (! emailFilter.test (tfld)) {// test e-mail for ulovlige tegn
error = “Indtast venligst en gyldig e-mail-adresse. n”;
} ellers hvis (fld.value.match (illegalChars)) {
error = “Indtast venligst en gyldig e-mail-adresse. n”;
}
returfejl
}
funktion validateEmail (fld) {
var fejl = ””;
var tfld = trim (fld.værdi); // værdi af felt med hvidt mellemrum trimmet fra
var emailFilter = /^ [^ @] + @ [^^.] +. [^@] *ww$/;
var illegalChars = / [(),;: \ ”[]] /;
hvis (fld.value == “Indtast din e-mail-adresse”) {
error = “Indtast venligst din e-mail-adresse. n”;
} ellers hvis (! emailFilter.test (tfld)) {// test e-mail for ulovlige tegn
error = “Indtast venligst en gyldig e-mail-adresse. n”;
} ellers hvis (fld.value.match (illegalChars)) {
error = “Indtast venligst en gyldig e-mail-adresse. n”;
}
returfejl
}
funktion validateEmail (fld) {
var fejl = ””;
var tfld = trim (fld.værdi); // værdi af felt med hvidt mellemrum trimmet fra
var emailFilter = /^ [^ @] + @ [^^.] +. [^@] *ww$/;
var illegalChars = / [(),;: \ ”[]] /;
hvis (fld.value == “Indtast din e-mail-adresse”) {
error = “Indtast venligst din e-mail-adresse. n”;
} ellers hvis (! emailFilter.test (tfld)) {// test e-mail for ulovlige tegn
error = “Indtast venligst en gyldig e-mail-adresse. n”;
} ellers hvis (fld.value.match (illegalChars)) {
error = “Indtast venligst en gyldig e-mail-adresse. n”;
}
returfejl
}
funktionsbeklædning
{
returner s.replace (/ ^ s + | s + $ /, ”);
}
funktionsbeklædning
{
returner s.replace (/ ^ s + | s + $ /, ”);
}
'.Focus' er en funktion, den skal være:
email.fokus ()
'.Focus' er en funktion, den skal være:
email.fokus ()
fantastisk
Fungerer som perle .. Stor brug af reg-udtryk i javascript ...
Det er en revne i perlen ...
Adressen “mmm @ mmm..com” accepteres. Men to prikker sammen er ikke gyldige.
Fellas, brug. Det kræver ingen JS-validering.
Men fungerer kun med moderne browsere. Desværre har verden ikke fanget op endnu. -
Sendt fra postkassen til iPhone