2016-03-22 40 views
-3

Lütfen bir maurit NIC onayında bana yardımcı olabilir misiniz?Düzenli ifade NIC

[1 capital letter][dateofBirth][6 numbers][1 capital letter] 

Not: doğum formatının Tarihi:

ddmmyy ben bu çalıştı:

/^[A-Z]{1}[0-9]{12}[A-Z]{1}$/ 

Ama nasıl ben NIC içinde doğum tarihini doğrularım? Teşekkürler.

+0

geçerli bazı NIC örneklerini verin. –

+0

, [...] {1} 'in gereksiz olduğunu not eder. Bir karakter sınıfı ('[]') her zaman tek bir karakterle eşleşir. –

+0

Örnek: D160289784495A – Student

cevap

3

Tarihi doğrulamak isterseniz, bunu yalnızca düzenli ifadelerle yapmakta zorlanacaksınız. Ancak, neyse ki, PHP'nin bir checkdate işlevi vardır. Gününü, ayını ve yılını ayıklamak zorundasınız, ki bu oldukça kolay olmalı ama normal ifadenizi biraz değiştirecek. Onları almak için her bir öğenin (gün, ay, yıl) etrafına parantez koymayı unutmayın. böylece,

/^[A-Z]([0-9]{2})([0-9]{2})([0-9]{4})[0-9]{6}[A-Z]$/ 

Sonra tarihini kontrol: Ben yanılmıyorsam

, senin regex böyle bir şey olmalı

preg_match('/^[A-Z]([0-9]{2})([0-9]{2})([0-9]{2})[0-9]{6}[A-Z]$/', 'D160289784495A', $match); 

var_dump(checkdate($match[2], $match[1], $match[3])); 
+0

Tam olarak ne yazıyordum, ben de onu düzenledim. – AbraCadaver

+0

Hiç sorun değil :) – Loufylouf

+0

$ match [2] 'nin ne yaptığını açıklayabilir misiniz? Cevabınız için çok teşekkürler – Student

0

Tarih, yıl ve ay aralığı için değil.

Ay, gün ve yıl aralıklarını normal ifadelerle kontrol edemezsiniz. Bunun için bazı kütüphane fonksiyonlarını kullanacaksınız. Aşağıdaki regex, NIC'un biçimini onaylayan bir ön işini yapacaktır. Bundan sonra tarihlerin geçerliliğini kontrol etmeye devam edin.

Bu regex biçimini sizin formatında doğum tarihi biçimi yana

[1 capital letter][dateofBirth][6 numbers][1 capital letter]

o 6 sayı olarak sadece Sayılan ddmmyy olduğunu

Regex101 Demo

Not ^[A-Z]\d{12}[A-Z]$

kontrol etmelidir formatın aslında bu

gibi

[1 capital letter][12 numbers][1 capital letter]

+0

Ama ilk 6 numarası doğum tarihi. Bunu nasıl doğrulayabilirim? Örnek: D160298190098A Yanıtınız için teşekkürler :) – Student

+0

@Student: ** Normal aralıklarla normal aralıklarla ** Aralık ** değerini doğrulayamazsınız. –

+0

Anlaşıldı. Ancak kullanıcı D421329184478A girerse, bu kabul edilmemelidir .. – Student