Aradım, araştırdım, oynadım ve onunla oynadım ve mükemmel olmasa da, diğerlerinin tek bir değişken olarak sağlanan ad ve soyadları doğrulama girişiminde bulunmasına yardımcı olabilir.
Benim durumumda, bu değişken $ isimdir.
PHP'm için aşağıdaki kodu kullandım:
if (preg_match('/\b([A-Z]{1}[a-z]{1,30}[- ]{0,1}|[A-Z]{1}[- \']{1}[A-Z]{0,1}
[a-z]{1,30}[- ]{0,1}|[a-z]{1,2}[ -\']{1}[A-Z]{1}[a-z]{1,30}){2,5}/', $name)
# there is no space line break between in the above "if statement", any that
# you notice or perceive are only there for formatting purposes.
#
# pass - successful match - do something
} else {
# fail - unsuccessful match - do something
RegEx'i kendim öğreniyorum ama RegEx dostum tarafından sağlanan kod için açıklamaya sahibim.
İşte burada:
Bir kelime sınırında pozisyon iddia et "\ b"
Aşağıdaki normal ifadeyi eşleştirin ve eşleşmesini 1
«([AZ] {1} [az] {1,30} [-] {0,1} | [AZ] {1} [- \ '] { 1} [AZ] {0,1} [az] {1,30} [-] {0,1} | [az] {1,2} [- \ '] {1} [AZ] {1} [ az] {1,30}) {2,5} »
2 ila 5 kez, olabildiğince çok, gerektiği kadar geri vermek (açgözlü) «{2,5}»
* BU NOTUN ÇÖZÜMLERİNİ ANLAMAK İÇİN BURADA BAZI YARDIMA İHTİYACIM VAR *
Not: Yakalama grubunun kendisini tekrarladım. Grup yalnızca son yinelemeyi yakalayacaktır. Tüm yinelemeleri yakalamak için tekrarlanan grubun etrafına bir yakalama grubu koyun. «{2,5}»
Aşağıdaki normal ifadelerden biriyle eşleştirin (yalnızca bu başarısız olursa bir sonraki alternatifi dener) «[AZ] {1} [az] {1,30} [-] {0,1}»
"A" ve "Z" "[AZ] {1}» arasındaki aralıkta tek bir karakterle eşleş
Tam olarak 1 kez «{1}»
"A" ve "z" "[az] {1,30}" aralığındaki tek bir karakterle eşleş
Bir ila 30 kez, olabildiğince çok, gerektiği kadar geri vermek (açgözlü) «{1,30}»
Listede bulunan tek bir karakterle eşleştir "-" «[-] {0,1}»
Sıfır ile bir kez arasında, olabildiğince çok, gerektiği kadar geri vermek (açgözlü) «{0,1}»
Veya aşağıdaki 2 numaralı normal ifadeyle eşleştirin (yalnızca bu başarısız olursa sonraki alternatifi dener) «[AZ] {1} [- \ '] {1} [AZ] {0,1} [az] {1,30} [ -] {0,1} »
"A" ve "Z" "[AZ] {1}» arasındaki aralıkta tek bir karakterle eşleş
Tam olarak 1 kez «{1}»
Aşağıdaki listede bulunan tek bir karakterle eşleştirin: «[- \ '] {1}»
Tam olarak 1 kez «{1}»
"-" «-» A 'karakteri «\'» karakterlerinden biri
"A" ve "Z" arasındaki aralıktaki tek bir karakterle eşleştir «[AZ] {0,1}»
Sıfır ile bir kez arasında, olabildiğince çok, gerektiği kadar geri vermek (açgözlü) «{0,1}»
"A" ve "z" "[az] {1,30}" aralığındaki tek bir karakterle eşleş
Bir ila 30 kez, olabildiğince çok, gerektiği kadar geri vermek (açgözlü) «{1,30}»
Listede bulunan tek bir karakterle eşleştir "-" «[-] {0,1}»
Sıfır ile bir kez arasında, olabildiğince çok, gerektiği kadar geri vermek (açgözlü) «{0,1}»
Veya aşağıdaki 3 numaralı normal ifadeyle eşleştirin (bu eşleşmezse tüm grup başarısız olur) «[az] {1,2} [- \ '] {1} [AZ] {1} [az] {1,30} »
"A" ve "z" "[az] {1,2}» aralığındaki tek bir karakterle eşleş
Bir ile 2 kez arasında, olabildiğince çok, gerektiği kadar geri vermek (açgözlü) «{1,2}»
"" Ve "" "« [- \ '] {1} »aralığındaki tek bir karakterle eşleş
Tam olarak 1 kez «{1}»
"A" ve "Z" "[AZ] {1}» arasındaki aralıkta tek bir karakterle eşleş
Tam olarak 1 kez «{1}»
"A" ve "z" "[az] {1,30}" aralığındaki tek bir karakterle eşleş
Bir ila 30 kez, olabildiğince çok, gerektiği kadar geri vermek (açgözlü) «{1,30}»
Bu doğrulamanın, formu dolduran her kişinin bir batı ismine sahip olduğunu ve bunun dünyadaki insanların büyük çoğunluğunu ortadan kaldırabileceğini tamamen varsaydığını biliyorum. Ancak, bunun doğru yönde atılmış bir adım olduğunu düşünüyorum. Belki de bu düzenli ifade, gurular için basit bir şekilde hitap edemeyecek kadar basittir veya belki de aramalarımda yukarıdaki kodu bulamamamın başka bir nedeni vardır. Bunu anlamaya çalışmak için çok uzun zaman harcadım, aşağıdaki test isimlerime bakarsanız, muhtemelen tüm bunlar üzerinde zihnimin ne kadar sisli olduğunu fark edeceksiniz.
Kodu aşağıdaki isimler üzerinde test ettim ve sonuçlar her ismin sağında parantez içinde.
- STEVE SMITH (başarısız)
- Stev3 Smith (başarısız)
- STeve Smith (başarısız)
- Steve SMith (başarısız)
- Steve Sm1th (Steve Sm'i geçti)
- d'Are'den Beaware'ye (Are to Beaware'den geçti)
- Jo Blow (geçti)
- Hyoung Kyoung Wu (geçti)
- Mike O'Neal (geçti)
- Steve Johnson-Smith (geçti)
- Jozef-Schmozev Hiemdel (geçti)
- O Henry Smith (geçti)
- Mathais d'Arras (geçti)
- Martin Luther King Jr (geçti)
- Downtown-James Brown (geçti)
- Darren McCarty (geçti)
- George De FunkMaster (geçti)
- Kurtis B-Ball Basketbol (geçti)
- Ahmad el Jeffe (geçti)
Temel isimleriniz varsa, yukarıdaki kodun çalışması için beşe kadar birden fazla olması gerekir, bunlar benim test sırasında kullandıklarına benzer, bu kod sizin için olabilir.
Herhangi bir iyileştirme varsa, lütfen bana bildirin. Henüz erken aşamadayım (RegEx'i anlamanın ilk birkaç ayı.
Teşekkürler ve iyi şanslar Steve