[ Lighttwen @ 10.11.2012. 21:49 ] @
Pozdrav,

Jedva sam našao Regular Expression Validation String za validaciju JMBG-a kod klijenata u mojoj WHMCS billing skripti a to je

Code:
/^(0[1-9]|[12][0-9]|3[01])(0[1-9]|1[012])[0-9]{9}$/


I sada mi je potreban Regular Expression Validation String za validaciju Matičnog Broja firmi.
Bio bih veoma zahvalan!
[ Igor Gajic @ 10.11.2012. 21:59 ] @
Taj regex matchuje "3102980425134"

tj. osoba je rodjena 31.2.1980....
[ Lighttwen @ 11.11.2012. 00:48 ] @
Nisam pitao ništa za JMBG, kao što vidiš imam dobar string samo sam ga podelio ljudima da ga imaju.
Treba mi za MBR ...
[ mmix @ 11.11.2012. 08:37 ] @
Pa on hoce da ti kaze da nemas dobar validation regex, jer prolazi datum koji ne postoji (31.2.) i u smislu funkcionalnosti nije velika razlika u odnosu na \d{13}. Datumi su uzasno teski za regex validaciju i ako ikako mozes treba da ih validiras kroz kod.

Sam MBR ti je jednostavan, 8 cifara. Dakle \d{8}

[ Lighttwen @ 11.11.2012. 14:29 ] @
Znači ispravnost matičnog broja nikako ne mogu da proverim koliko sam skontao već to može APR jedino što ja mogu da proverim jeste dužina :(
Reci mi za JMBG
Šta da izmenim ovde da bude bolje

Code:
/^(0[1-9]|[12][0-9]|3[01])(0[1-9]|1[012])[0-9]{9}$/


Valjda može da služi svrsi?
[ mmix @ 11.11.2012. 14:48 ] @
Pa sluzi svrsi u smislu da ne mozes da uneses slova i tome slicno, ali ne moze da ti validira u svim situacijama. Nazalost, ja jos nisam video regex koji validira datume i sta vise prilicno sam ubedjen da je to nemoguce zbog prestupnih godina. Jedino sto moze da se poboljsa je da se napravi kobasica koja nece dozvoljavati 31.11 i slicno.

A to je samo sto se tice datuma. Ostatk JMBGa isto ima voja ogranicenja. Npr sledece dve cifre posle datuma su region a kodovi 60-69 nisu validni za region. I jos na kraju imas kontrolnu cifru po mod11, sto je opet van mogucnosti regexa. Samim tim ne vredi da se mnogo maltertiras sa time, uzmes \d{13} da eliminises sve sem cifara i onda parsiras i validiras u kodu.

Sto se tice APRa, mozda postoji neki javni web servis kojem mozes da posaljes MBR na proveru. Nisam siguran.


[ Lighttwen @ 11.11.2012. 16:49 ] @
Meni ovo već deluje, počeli su da mi unose validne JMBG-ove ;)
Imam problema često čoveče, ljudi unesu nevalidan JMBG i posle ja kada registrujem .rs domen odužim to na 3 dana zbog njihovog nemara.
[ vbbojan @ 17.11.2012. 11:25 ] @
Ima mnogo bolji i lakši način da pouzdano proveriš JMBG:

http://www.elitesecurity.org/t376222-0#2396119

Naravno ako imaš mogućnost da ovakvo nešto implementiraš u tvoju skriptu.
[ mmix @ 17.11.2012. 12:58 ] @
Tj metod je previse zakomplikovan. Dovoljno je prvih sedam cifara ddmmyyy formatirati u dd.mm.(1|2)yyy i iskoristiti date tryparse.
[ vbbojan @ 17.11.2012. 14:25 ] @
Pa jeste malo komplikovaniji, ali pouzdanost kontrole unosa je mnogo veća i praktično eliminiše mogućnost pogrešnog unosa.
Ne znam gde to treba da udene i koliko je tačnost bitna, ali cela implementacija nije (ne bi trebalo da je) "skupa".
Kod sa onog linka jeste rogobatan, ali može se to lepo optimizovati i skratiti.

Provera da prvih sedam unešenih karaktera predstavljaju formalno ispravan datum daleko je od toga da garantuje da je uneseni JMBG tačan.

Što ne iskoristiti mogućnost kontrole koja je ugrađena u sam sistem JMBG.
[ Shadowed @ 17.11.2012. 16:32 ] @
Potrebno je proveriti datum i ugradjenu validaciju.
[ Lighttwen @ 17.11.2012. 17:38 ] @
Možete li vi meni da izmenite ovaj regex i kažete šta nije ok....

Code:
/^(0[1-9]|[12][0-9]|3[01])(0[1-9]|1[012])[0-9]{9}$/
[ mmix @ 17.11.2012. 22:35 ] @
@vbbojan, veci deo tog koda je provera datumskog dela jmbg, moja primedba je da sve to moze da se zamni sa jednom linijom koda, ostale cifre moraju da se provere po sistemu regionalnih kodova i polu (kao i mod11)

@Lighttwen, ne shvatas nasu primedbu, nema sta drugo da se promeni u regexu da bi bio bolji, jednostavno regex nije odgovarahuci alat za precizniju validaciju od te koju vec imas.
[ Lighttwen @ 18.11.2012. 01:18 ] @
Pa nemojte me zbunjivati onda.
[ mmix @ 18.11.2012. 08:31 ] @
Ko te zbunjuje, lepo ti je receno da ne moze jer regex ne moze bolje. Neznaci da ti je izraz ispravan, samo da ne moze bolje.


Btw, mozes ipak malo da ga skratis, [0-9] moze da se zameni sa \d