[java regex] Welke is het beste?

Pagina: 1
Acties:

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Een emailverificatie, het blijft na heel veel posts toch nog onduidelijk. Kunnen we hier alle oplossingen beschrijven met voor- en nadelen?

Een opsomming van de al reeds geposte bevindingen:

1.
code:
1
/^[A-Za-z0-9_-]+([.][A-Za-z0-9_-]+){0,4}[@][A-Za-z0-9_-]+([.][A-Za-z0-9_-]+){1,3}$/.test (value)

2.
code:
1
/^[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test (value)

3.
code:
1
/^(([^<>;()[\]\\.,;:@"]+(\.[^<>()[\]\\.,;:@"]+)*)|(".+"))@((([a-z]([-a-z0-9]*[a-z0-9])?)|(#[0-9]+)|(\\[((([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\.){3}(([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\]))\.)*(([a-z]([-a-z0-9]*[a-z0-9])?)|(#[0-9]+)|(\\[((([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\.){3}(([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\]))$/

4.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function isEmail(str) {
  // are regular expressions supported?
  var supported = 0;
  if (window.RegExp) {
    var tempStr = "a";
    var tempReg = new RegExp(tempStr);
    if (tempReg.test(tempStr)) supported = 1;
  }
  if (!supported) 
    return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
  var r2 = new RegExp("^.+\\@(\\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
  return (!r1.test(str) && r2.test(str));
}

5.
code:
1
^(([^<>;()[\]\\.,;:@"]+(\.[^<>()[\]\\.,;:@"]+)*)|(".+"))@((([a-z]([-a-z0-9]*[a-z0-9])?)|(#[0-9]+)|(\\[((([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\.){3}(([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\]))\.)*(([a-z]([-a-z0-9]*[a-z0-9])?)|(#[0-9]+)|(\\[((([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\.){3}(([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\]))$

6.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
   var chkDot = true;
   var usEmail = true;
   function validEmail(eAddr) 
   { 
    var lenSuffix = (usEmail) ? 4 : 3;
    var result = false;
    var ndxAt = ndxDot =  0;
        
    ndxAt  = eAddr.indexOf("@");
    ndxDot = eAddr.indexOf(".") ;
    ndxDot = eAddr.lastIndexOf(".") ;
        
    if ((ndxDot < 0) || (ndxAt < 0))
       alert("Your email address lacks '.' or '@'.
          \n\nThe format is 'you@dom.suf'"); 
    else if (chkDot && (ndxDot < ndxAt) )
       chkDot = !( 
        confirm("You entered a 'dot' before
        the '@'\nAre you sure that is 
        right?") );
    else if ( (ndxDot2 - 3) <= ndxAt)
       alert("You may be missing your domain name.
        \n\nThe format is 'you@dom.suf'");
    else if (tmpStr.length < ndxDot2 + lenSuffix) 
       usEmail = !(
         confirm("You have fewer than 3 characters
         as a domain suffix.\nAre you sure that is
         right?") );
    else 
         result=true; 
        
    return result; 
   }

7.
code:
1
2
3
4
function test(str)
  {
    if ( (!str.match(/\W/gi)) && (str.match(/[A-Za-z]/i)) && (str.match(/[\d]/i)) && (str.length >= 5)) alert('s');
  }

8.
code:
1
(!( ( /^[0-9a-zA-Z]+$/.test(str)) && (str.match(/[\D]/i)) && (str.match(/[\d]/i)) && (str.length >= 5)))

suggesties,opmerkingen,tips,aanmerkingen,ideeen??

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Let er in ieder geval op dat je niet ([.][A-Za-z0-9_-]+){1,3}$/ dit soort dingen aan het einde van je regex gaat proppen, aangezien de extensie officieel niet beperkt is in lengte.

  • Grum
  • Registratie: Juni 2001
  • Niet online
IMHO de beste check:

1/ minimaal 3 tekens (x@x)
2/ precies 1 @
3/ minimaal 1 teken voor et @
4/ minimaal 1 teken na et @

De rest niet controleren en er gewoon een mailtje heen sturen voor de bevestiging.

Er bestaat meen ik 1 goede check email .. in perl mbv regexes .. ~200 lines lang.

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Op maandag 29 april 2002 15:14 schreef Grum het volgende:
IMHO de beste check:

1/ minimaal 3 tekens (x@x)
2/ precies 1 @
3/ minimaal 1 teken voor et @
4/ minimaal 1 teken na et @
Wat zijn jouw criteria bosmonster?

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Grum heeft in principe wel gelijk, je kunt echter ook vrij simpel kijken of er geen punten aan het begin, einde of voor of na @ staan..


Grofweg kom je dan op nummero 2 :) En das ook degene die ik zelf altijd gebruik :P

Die van 200 tekens is trouwens die nummer 3 (en 5 das dezelfde). Die zou zich volledig aan de standaard houden.. maar is mij te lang :P

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
Een bevestigings-email checkt het beste :)
Verder kan je idd nog wel ff checken of het uberhaubt wel een email-adres zou kunnen zijn, maar dat hoef je niet al te uitgebreid te doen imho.

  • Grum
  • Registratie: Juni 2001
  • Niet online
Ik meen dat ik zei 200 regels :)

Die regex is echt krankzinnig en staat hier nog niet bij ;)
(er zit wel veeel whitespace/comments in btw)

Bosmonster: blaat.@blaat is echt niet invalid zover ik weet :D

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Ik vind zelf 2 mooier dan 1, omdat je dan je willekeurige beperkingen achterwege laat. Verder zou ik zelf zo'n beetje alles voor 't apestaartje toestaan, aangezien het gebruikersnaam-deel van een email adres in theorie niet beperkt is tot alfanumerieke karakters en een streepje. Ik weet niet precies wat de RFC hierover zegt, maar in ieder geval zaken als underscores, hekjes, e.d. zijn ook mogelijk.

Verder snap ik 5 niet helemaal. Zou je die kunnen toelichten? :)

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Op maandag 29 april 2002 15:38 schreef Grum het volgende:
Ik meen dat ik zei 200 regels :)

Die regex is echt krankzinnig en staat hier nog niet bij ;)
(er zit wel veeel whitespace/comments in btw)

Bosmonster: blaat.@blaat is echt niet invalid zover ik weet :D
Hmm 200 regels..

"blaat.@" mag volgens mij nie hoor.. maar kan het fout hebben.. :P

  • Grum
  • Registratie: Juni 2001
  • Niet online
7 en 8 komen ook uit een topic ... wat totaal niet eens email related is [EN ook nog es van jezelf is :D]

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Op maandag 29 april 2002 15:40 schreef Soultaker het volgende:
Verder snap ik 5 niet helemaal. Zou je die kunnen toelichten? :)
erm... :? nee? *D

Maar ik heb de volgende mening:
Een verificatie verliest op een bepaald moment gewoon zijn gehele waarde als hij te groot is, en teveel beperkingen gaat krijgen. Een emailverificatie is er puur alleen om niet-oplettende bezoekers te waarschuwen dat ze misschien een foutje hebben gemaakt. Het heeft totaal geen nut te kijken of het bestaat aan de hand van regeltjes, een verificatie-email trug zegt genoeg...

Dus simpel kijken OF er iets voor de @ staat, er een @ is, en iets NA de @ zou al voldoende kunnen zijn :)

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Op maandag 29 april 2002 15:43 schreef Grum het volgende:
7 en 8 komen ook uit een topic ... wat totaal niet eens email related is [EN ook nog es van jezelf is :D]
|:( je hebt gelijk, was te gretig met mijn got-windows om zeker te zijn dat ik alle regexen had :P mijn excuses....

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Op maandag 29 april 2002 15:47 schreef Vinzzz het volgende:
Maar ik heb de volgende mening:
Een verificatie verliest op een bepaald moment gewoon zijn gehele waarde als hij te groot is, en teveel beperkingen gaat krijgen.
Ik zou het iets anders willen brengen: hoe beperkender je verificatie is, hoe beter, maar hij mag in geen geval een email adres verbieden dat wel geldig is. Eisen als 'geen punt voor het apestaartje' zullen in veel gevallen geen problemen geven, maar aangezien het een toegestaan email-adres verbiedt, is het geen goede verificatie.

  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

De topic-titel zegt Java, maar hier gaat het puur om JavaScript, toch? Kijk voor een Java aanpak maar eens in de source code van James, en dan met name naar de MailAddress class...

Naar mijn idee is een echte controle alleen server-side mogelijk, ook al omdat je met een regex alleen de syntax kan controleren. Wil je het echt weten dan moet je oa proberen of het domein wel echt bestaat.

With the light in our eyes, it's hard to see.


  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Op maandag 29 april 2002 15:51 schreef Bobco het volgende:
De topic-titel zegt Java, maar hier gaat het puur om JavaScript, toch? Kijk voor een Java aanpak maar eens in de source code van James, en dan met name naar de MailAddress class...

Naar mijn idee is een echte controle alleen server-side mogelijk, ook al omdat je met een regex alleen de syntax kan controleren. Wil je het echt weten dan moet je oa proberen of het domein wel echt bestaat.
gelijk heb je...
(topic titel moest idd javascript zijn)
waar ik de verificatie voor gebruik, is het helemaal niet nodig superingewikkelde regexxen te gebruiken...maar vroeg me alleen af of er eentje was die heel erg in de buurt kwam :)

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Op maandag 29 april 2002 15:51 schreef Bobco het volgende:
De topic-titel zegt Java, maar hier gaat het puur om JavaScript, toch? Kijk voor een Java aanpak maar eens in de source code van James, en dan met name naar de MailAddress class...

Naar mijn idee is een echte controle alleen server-side mogelijk, ook al omdat je met een regex alleen de syntax kan controleren. Wil je het echt weten dan moet je oa proberen of het domein wel echt bestaat.
Das nu precies het verschil tussen validatie en verificatie.

Het ging hier om de validatie. De 2e regexp staat trouwens WEL een punt toe voor de apestaart, dus ik versprak me ff :P

  • Grum
  • Registratie: Juni 2001
  • Niet online
Het ene zal de syntax en de andere het werkelijke bestaan controleren. Nu mag je zelf even een discussie starten welke welke is :D

  • Vinzzz243
  • Registratie: Februari 2001
  • Laatst online: 22-01-2025
Op maandag 29 april 2002 15:55 schreef Bosmonster het volgende:

[..]

Das nu precies het verschil tussen validatie en verificatie.

Het ging hier om de validatie. De 2e regexp staat trouwens WEL een punt toe voor de apestaart, dus ik versprak me ff :P
a.@a.nl geeft error
Pagina: 1