RSS Feed LinkedIn Google Plus

JavaScript RegExp visualizer

2013. március 4. hétfő

A reguláris kifejezés valami olyan, amit legtöbbször csak write-only módban lehet kezelni: ha nem tetszik, az esetek nagy részében könnyebb újra megírni, mint kijavítani.  Néha azonban jól jönne apróbb javítást eszközölni, vagy csak átnézni, hogy valóban azt csinálja-e, amit akarunk, ebben nyújthat nagy segítséget a Regexper honlap.

Vegyünk például egy egyszerű esetet: email címet szeretnénk validálni kliens oldalon. Rákeresünk a Google-ön, az első találat (nálam legalábbis) egy StackOverflow-os válasz elfogadva megoldásnak (ott a nagy zöld pipa), és 439-en szavaztak rá, tökéletes. A kód így néz ki:

function validateEmail(email) {
    var re = /^(([^<>()[\]\\.,;:\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,}))$/;
    return re.test(email);
}

Tehát asszongya’… van egy reguláris kifejezésünk, ami úgy kezdődik, hogy… és van benne kukac, meg… OK, ez jó lesz, mehet élesbe’.

Nézzük, mint mond a Regexper:

Email Regular Expression in JavaScriptSokkal átláthatóbb, például jól elkülönül a kukac előtti és utáni rész. Hm, ebben már el lehet mélyülni alaposabban. Nézzük csak, találunk-e valami furcsát… ami először szembetűnik az a domainnél van: lehet benne “A” betű, és bármi ” ” és “Z” között, ez hiba, bár nem az eredeti készítő tette bele, hanem a copy+paste alatt romlott el. Attól függetlenül rossz, nem tehetjük egy-az egyben az éles környezetbe:

Selection_003A másik, de ez már csak apróság, hogy megenged két kötőjelet a domainben, ami a specifikáció szerint tiltott (kivéve, ha az ékezetes domain már át van ASCII-ra alakítva).

Még egy furcsaság van benne, ez pedig az idézőjeles megoldás az elején:

email regexp error 2Egyrészt miért kell szóközzel kezdődnie az idézőjeles megoldásnak? (A Copy+Paste miatt.) Másrészt ha az idézőjelek között bármi lehet, akkor idézőjel is… Ez nem fogja elrontani a stringünket?

 

 


1 hozzászólás

  1. Árpád szerint:

    Köszi a cikket, nagyon hasznos eszköznek találom!

Bocsánat, de a bejegyzéshez egyelőre nem engedélyezett a hozzászólás.