Soru ad ve soyad için düzenli ifade


Web sitesi doğrulama amaçları için, ilk ad ve soyadı doğrulamasına ihtiyacım var.

İlk isim için sadece harf içermeli ve boşluklu ve harfsiz, minimum 3 karakterli ve en üstteki 30 karakterli birkaç kelime olabilir. Boş dize doğrulanmamalıdır. yani:

Jason, Jason, Jason Smith, Jason Smith, Jason Smith, Jason Smith, Jason SMITH.

Soyadı için tek bir kelime, sadece harf ve en az 3 karakter ve en üst 30 karakter olmalıdır. Boş dize doğrulanmamalıdır. IE: lazslo, Lazslo, LAZSLO


87
2018-03-05 09:36


Menşei


'Jo' gibi ilk isimlerden ne haber? - a'r
sadece bir açıklama: kısa adlar kısa adlar içinde yaygındır ... belki de uzaylı isimler vardır - tanascius
Bu doğrulama, ingilizce olmayan bir site için olacaktır, bu yüzden ülkemde daha az ya da daha küçük ad 3 harftir :) Ayrıca bir facebook için e-ticaret siteme girişime bağlanacaktır. Böylece "Danielle Cage ッ" veya "Hopee Lamb-" gibi bazı aptal facebook isimleri onaylanmamalıdır, kullanıcı isimlerini yeniden yazmak istenecektir - bu durumda sirnameler :) - Hellnar
Not: düzenli bir ifade validasyonu boş girdileri görmezden gelecektir: bu sizin istediğiniz gibi olabilir veya olmayabilir. - Hans Kesting
Mümkünse, bir ad ve soyadı gerektirme konusunda inanılmaz derecede zorlayıcı bir nedeniniz yoksa, sadece bir "Ad" alanı sağlayın. kalzumeus.com/2010/06/17/... - Chris


Cevaplar:


Şunun gibi isimleri unutma:

  • Mathias d'Arras
  • Martin Luther King, Jr.
  • Hector Sausage-Hausen

Bu çoğu şey için hile yapmalı:

/^[a-z ,.'-]+$/i

VEYA Süper tatlı unicode ile uluslararası isimleri destekleyin:

/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+$/u


140
2018-03-05 10:23



Ben kaçardım özel karakterlerbu regexps'de - özellikle . regexp joker karakteri olduğu için (ondalık nokta / nokta / tam durma) =) - Joel Purra
@JoelPurra [] tarafından zaten kaçtı (: - wprl
Tüm olası ulusal karakterleri doğrulayamazsınız. Örneğin Macarca karakterler őŐűŰ eksik, Lehçe karakterler łŁ Ayrıca, Litvanyalı ve Letonca karakterlerin bir dizi söz değil. Daha ziyade, egzotik karakterleri uygun aksan olmayan versiyona dönüştüren bir kütüphane bulmaya çalışın. /^[a-z ,.'-]+$/i regexp'in. - gaborsch
Yani 陳大文 geçerli bir isim değil mi? - Alvin Wong
Unicode için kullanın /^[\p{L}'][ \p{L}'-]*[\p{L}]$/uAncak, oldukça bağışlayıcı. - Frederik Krautwald


İlk ve soyadı biçiminde yanlış varsayımlar yaparsınız. Adın boş olduğunu kontrol etmekten ayrı olarak, ismi doğrulamamak muhtemelen daha iyidir.


58
2018-03-05 09:55



Tekrarlayın, ancak üstte sayısal değerlere izin vermeyen bir normal ifadeyi kolayca ekleyebilirsiniz. - Wilt
Mononyms hakkında ne dersiniz? - Achilles Rasquinha
Xss enjeksiyonla doldurulmuş bir veritabanına sahip olmak istemediğiniz sürece isminizi doğrulamalısınız ... her alanı doğrulamalısınız .. - Andy
@Wilt Niçin sayısal değerlere izin vermezdiniz? Peki ya "John 3rd Earl of Stonecastle"? - Christian Hujer
@Andy hakkında konuştuğunuz şey, temizlik değil, temizliktir. Bu tamamen farklı iki şey. Her dize, karşılık gelen kaçan motordan geçirilerek temizlenir ve bu DAO katmanında gerçekleşmelidir. Doğrulama, Görünüm'ün bir dahili modelle eşlendiği katmanda gerçekleşir. - Christian Hujer


Arama yaptım, araştırdım, çaldım ve oynadım ve mükemmel olmasa da, başkalarının bir değişken olarak sağlanmış olan birinci ve soyadlarını doğrulama girişimlerine yardımcı olabilir.

Benim durumumda, bu değişken $ adıdır.

PHP'm için şu 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, ancak RegEx dostum tarafından sağlanan kod için açıklamam var.
İşte burada:

Kelime sınırında pozisyonu belirle «\ b»

Aşağıdaki normal ifadeyi eşleştirin ve eşleşmesini geri sayım 1'e kaydedin
«([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 arasında, mümkün olduğu kadar, mümkün olduğu kadar geri dönmek (açgözlü) «{2,5» »

* BU NOTUNUN TAMAMLILARINI ANLAYIŞIYLA BAZI YARDIMI GEREKİR * 

Not: Yakalama grubunun kendisini tekrarladım. Grup sadece son iterasyonu yakalayacaktır. Tüm yinelemeleri yakalamak için tekrarlanan grup etrafında bir yakalama grubu yerleştirin. «{2,5}»

Aşağıdaki normal ifadeyi eşleştirin (bir sonraki alternatifi ancak bu başarısız olursa deneyin) «[A-Z] {1} [a-z] {1.30} [-] {0,1}»

Tek bir karakteri “A” ve “Z” «A-Z] {1} arasındaki aralıkta eşleştirin»

Tam olarak 1 kere «{1}»

“A” ve “z” arasındaki aralıkta tek bir karakteri eşleştirin «[a-z] {1,30}»

İhtiyaç duyulduğunda (açgözlü) mümkün olduğu kadar, bir ile 30 kez arasında, mümkün olduğunca geri dönüyor «{1,30}»

“-” «[-] {0,1}» listesinde bulunan tek bir karakteri eşleştirin

Sıfır ile bir kez arasında, mümkün olduğu kadar çok, gerektiğinde geri dönüş (açgözlü) «{0,1}»

Ya da aşağıdaki normal ifade numarası 2 ile eşleştirin (bir sonraki alternatifi ancak bu başarısız olursa deneyin) «[AZ] {1} [- \ '] {1} [AZ] {0,1} [az] {1,30} [ -] {0,1} »

Tek bir karakteri “A” ve “Z” «A-Z] {1} arasındaki aralıkta eşleştirin»

Tam olarak 1 kere «{1}»

Aşağıdaki listede bulunan tek bir karakteri eşleştirin «[- \ '] {1}»

Tam olarak 1 kere «{1}»

Karakterlerden biri “-” «-» A 'karakteri «\'»

“A” ve “Z” «A-Z] {0,1}» aralığındaki tek bir karakteri eşleştirin

Sıfır ile bir kez arasında, mümkün olduğu kadar çok, gerektiğinde geri dönüş (açgözlü) «{0,1}»

“A” ve “z” arasındaki aralıkta tek bir karakteri eşleştirin «[a-z] {1,30}»

İhtiyaç duyulduğunda (açgözlü) mümkün olduğu kadar, bir ile 30 kez arasında, mümkün olduğunca geri dönüyor «{1,30}»

“-” «[-] {0,1}» listesinde bulunan tek bir karakteri eşleştirin

Sıfır ile bir kez arasında, mümkün olduğu kadar çok, gerektiğinde geri dönüş (açgözlü) «{0,1}»

Veya aşağıdaki 3 numaralı normal ifade ile eşleştirin (bu grup eşleşmezse grubun tamamı başarısız olur) «[az] {1,2} [- \ '] {1} [AZ] {1} [az] {1,30} »

Tek bir karakteri “a” ve “z” «[a-z] {1,2} arasındaki aralıkta eşleştirin»

İhtiyaç duyulduğunda (açgözlü) mümkün olduğunca fazla bir ve iki kez arasında («açgözlü]« {1,2} »

Tek bir karakteri "" ve "" "« [- \ '] {1} »aralığında eşleştirin

Tam olarak 1 kere «{1}»

Tek bir karakteri “A” ve “Z” «A-Z] {1} arasındaki aralıkta eşleştirin»

Tam olarak 1 kere «{1}»

“A” ve “z” arasındaki aralıkta tek bir karakteri eşleştirin «[a-z] {1,30}»

İhtiyaç duyulduğunda (açgözlü) mümkün olduğu kadar, bir ile 30 kez arasında, mümkün olduğunca geri dönüyor «{1,30}»

Bu geçerliliğin, formu dolduran her insanın bir batı ismine sahip olduğunu ve dünyadaki insanların büyük çoğunluğunu ortadan kaldıracağını varsaydığını biliyorum. Ancak, bunun doğru yönde bir adım olduğunu düşünüyorum. Belki de bu düzenli ifade, gurular için basit bir şekilde ele alınması için çok basit ya da belki aramalarımda yukarıdaki kodu bulamadığım başka bir sebep daha var. Çok uzun zaman harcadım bunu anlamaya çalışıyorum, muhtemelen test isimlerime bakarsanız aklımın ne kadar sisli olduğunu fark edeceksiniz.

Aşağıdaki isimler üzerinde kodu test ettim ve sonuçlar her ismin sağında parantez içinde.

  1. STEVE SMITH (başarısız)
  2. Stev3 Smith (başarısız)
  3. STeve Smith (başarısız)
  4. Steve SMith (başarısız)
  5. Steve Sm1th (Steve Sm’den geçti)
  6. Beaware d'Are (Are Are Beaware'ye doğru)
  7. Jo Blow (geçti)
  8. Hyoung Kyoung Wu (geçti)
  9. Mike O'Neal (geçti)
  10. Steve Johnson-Smith (geçti)
  11. Jozef-Schmozev Hiemdel (geçti)
  12. O Henry Smith (geçti)
  13. Mathais d'Arras (geçti)
  14. Martin Luther King Jr (geçti)
  15. Downtown-James Brown (geçti)
  16. Darren McCarty (geçti)
  17. George De FunkMaster (geçti)
  18. Kurtis B-Ball Basketbol (geçti)
  19. Ahmad el Jeffe (geçti)

Temel isimleriniz varsa, yukarıdaki kodun çalışması için, test sırasında kullandığımın benzeri olan beşe kadar bir sayı olmalıdır, bu kod sizin için olabilir.

Herhangi bir geliştirmeniz varsa lütfen bize bildirin. Ben sadece erken aşamalarda (RegEx'i bulmanın ilk birkaç ayıyım.

Teşekkürler ve iyi şanslar, Steve


15
2018-04-24 13:54



"Dördüncü" veya "IV" gibi şeyler bununla çalışır mı? - majidarif


Herkese iyi günler.

İsimleri ele almak için özel bir regex oluşturdum:

Bu tür isimleri denedim ve mükemmel çalışmayı buldum

1) John Smith
2) John D'Largy
3) John Doe-Smith
4) John Doe Smith
5) Hector Sausage-Hausen
6) Mathias d'Arras
7) Martin Luther King
8) Ai Wong
9) Chao Chang
10) Alzbeta Bara


RegEx'im şu şekilde görünüyor:

^([a-zA-Z]{2,}\s[a-zA-z]{1,}'?-?[a-zA-Z]{2,}\s?([a-zA-Z]{1,})?)

MVC4 Modeli:

[RegularExpression("^([a-zA-Z]{2,}\\s[a-zA-z]{1,}'?-?[a-zA-Z]{2,}\\s?([a-zA-Z]{1,})?)", ErrorMessage = "Valid Charactors include (A-Z) (a-z) (' space -)") ]

Kaçış karakterleri için çifte \ unutmayın

RegEx için yeni olanlarınız için bir açıklama ekleyeceğimi düşündüm.
^  (satırın başlangıcı)
[A-Za-z] {2}  (en az iki karakter içeren bir isim hariç)
\ s  (isim ve soyadı arasında beyaz boşluk arar)
[A-Za-z], {1},  (en az 1 Karaktere ihtiyaç duyar)
'? -?  (bir şeyin olma ihtimali ' veya - çift ​​namlulu ve tireli soyadı için)
[A-Za-z] {2}  (en az iki karakter içeren bir isim hariç)
\ S?  (başka bir boşluk olasılığı)
([A-Za-z], {1})? * (ikinci bir soyadı olasılığı) <* br />

Umarım bu projelerinize yardımcı olur.
Saygılarımla
Francois Muller


10
2017-10-15 08:01



Birkaç isim, sonra isimleri olmayan birkaç şeyi test eden bir birim testim var. İsim listesinde, ilk giriş olarak 'test belirteci' bulunur. Bu onunla eşleşiyor. - Rob
Neredeyse aradığım şey. Sanırım (belki de yanlış) fransız bir adamsın. Ve bir dava, Fransızcada karşılaşabileceğiniz bir işlem değildir: Jean-Pierre, Marie-Charlotte, vb. Gibi isimler. Ben exp diye yeni biriyim ama sanırım bir -? Soyadı için yaptığınız gibi, ilk iki kelime arasında, işi yapabilirdi. - Linpter
Merhaba Linpter, Fransızca değil, ancak bir Fransızca ismim var. Evet. Bunu test etmedim, ancak şunu eklemelisiniz: - ilk [] 'de bu yüzden değişiklik yapmalısınız: ^ ([a-zA-Z] {2,} \ s [a-zA-z] {1,}' ? -? [a-zA-Z] {2,} \ s? ([a-zA-Z] {1,})?) TO: ^ ([a-zA-Z -] {2,} \ s [a-za-z], {1} '-?? [a-za-z] {2} \ s ([a-za-z], {1})) - Francois Muller


İlk isim olurdu

"([a-zA-Z]{3,30}\s*)+"

Eğer ilk isim kısmına 30'dan daha az harfle ihtiyacınız varsa, bunu ayrı ayrı kontrol etmelisiniz, bence. İfade ".{3,30}" bunu yapmalı.

Soyadı gereksinimleriniz

"[a-zA-Z]{3,30}"

ama bunları kontrol etmelisin. Boşluk içeren çok sayıda soyad vardır.


8
2018-03-05 09:42



Bu, boşlukları kontrol ediyor mu? - Y_Y
Ne dersin O'Connor? Kesme işleminin de dahil edilmesi gerekiyor. - spaceman
Oldukça eksik. İlk isim tire ile "Jean-Claude" olabilir. Soyad alıntı ile "D'arc" olabilir. Artı, ya "François" ilk isim ise? - bart
Peki ya "Al"? Geçerli ilk ad. Sadece iki harf. Çince, Rusça, Hintçe isimleri ne olacak? Avrupa isimleri ne olacak? - Christian Hujer


Tüm bu cevaplardan geçtikten sonra, çoğu dili destekleyen ve yalnızca kelime karakterlerine izin veren küçük bir regex oluşturmanın bir yolunu buldum. Hatta tire, boşluk ve kesme gibi bazı özel karakterleri destekler. Python'da test ettim ve aşağıdaki karakterleri destekliyor:

^[\w'\-,.][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$

Desteklenen karakterler:

abcdefghijklmnopqrstwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
áéíóúäëïöüÄ'
陳大文
łŁőŐűŰZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųū
ÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁ
ŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ.-
ñÑâê都道府県Федерации
আবাসযোগ্য জমির걸쳐 있는

8
2017-08-24 22:17



Tüm cevaplardan bu ng 4 kullanarak bir çekicilik gibi çalıştı. - Deniss M.


Maček'in dediği gibi:

Şunun gibi isimleri unutma:

Mathias d'Arras

Martin Luther King, Jr.

Hector Sausage-Hausen

ve gibi davaları kaldırmak için:

..Mathias

Martin King Jr.

Bu daha fazla olayı kapsayacak:

^([a-z]+[,.]?[ ]?|[a-z]+['-]?)+$

7
2017-09-11 06:52



Karakter uzunluğumu sınırlamak istiyorsam, bunun için kod ne olabilir? - G.Abhisek
Evet Martin Luther King Jr. bir maç olarak geri döndü ve Kral Henry de Sekizinci. - Steve Kinzey


Uluslararası Pasaportları (ICAO) doğrulayan app üzerinde çalışıyorum. Sadece ingilizce karakterleri destekliyoruz. Çoğu yabancı ulusal karakter Latin alfabesinde bir karakterle temsil edilebilir, örn. è tarafından, örneğin um e ’harfinin eklenmesi gereken bir‘ e ’gerektiren Alman ümmeti gibi onları temsil edecek fazladan bir harf gerektiren birkaç ulusal karakter vardır. ae tarafından.

Bu, kullandığımız ad ve soyadların JavaScript Regex'i:

/^[a-zA-Z '.-]*$/

Uluslararası pasaporttaki maksimum karakter sayısı 31'e kadar. Biz regex içine dahil etmek yerine daha iyi kelime hata mesajları için maxlength = "31" kullanın.

AngularJS 1.6'daki kodumuzdan form ve hata işleme ile bir pasaj:

class PassportController {
  constructor() {
    this.details = {};
    // English letters, spaces and the following symbols ' - . are allowed
    // Max length determined by ng-maxlength for better error messaging
    this.nameRegex = /^[a-zA-Z '.-]*$/;
  }
}

angular.module('akyc', ['ngMessages'])
  .controller('PassportController', PassportController);
 
.has-error p[ng-message] {
  color: #bc111e;
}

.tip {
  color: #535f67;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.6/angular.min.js"></script>
<script src="https://code.angularjs.org/1.6.6/angular-messages.min.js"></script>

<main ng-app="akyc" ng-controller="PassportController as $ctrl">
  <form name="$ctrl.form">

    <div name="lastName" ng-class="{ 'has-error': $ctrl.form.lastName.$invalid} ">
        <label for="pp-last-name">Surname</label>
        <div class="tip">Exactly as it appears on your passport</div>
        <div ng-messages="$ctrl.form.lastName.$error" ng-if="$ctrl.form.$submitted" id="last-name-error">
          <p ng-message="required">Please enter your last name</p>
          <p ng-message="maxlength">This field can be at most 31 characters long</p>
          <p ng-message="pattern">Only English letters, spaces and the following symbols ' - . are allowed</p>
        </div>
        
        <input type="text" id="pp-last-name" ng-model="$ctrl.details.lastName" name="lastName"
               class="form-control" required ng-pattern="$ctrl.nameRegex" ng-maxlength="31" aria-describedby="last-name-error" />
      </div>

      <button type="submit" class="btn btn-primary">Test</button>

  </form>
</main>


4
2017-08-29 23:52



@danieltakeshi Regeximi kullanmadın. Bunu kullanın: / ^ [a-zA-Z '.-] * $ / - Alexander Burakevych


Kullanırım:

/^(?:[\u00c0-\u01ffa-zA-Z'-]){2,}(?:\s[\u00c0-\u01ffa-zA-Z'-]{2,})+$/i

Ve başka araçlar kullanarak maxlength için test


3
2018-06-25 16:30





Kullandığım bu. Bu regex, yalnızca minimum karakterleri olan adları kabul eder A-Z a-z ,space and -.

İsimleri örnek: Ionut Ionete, Ionut-Ionete Cantemir, Ionete Ionut-Cantemirm Ionut-Cantemir Ionete-Second

{3,} ile {6,} arasında değişiklik yapmak istiyorsanız, ad karakterinin sınırı 3'tür.

([a-zA-Z\-]+){3,}\s+([a-zA-Z\-]+){3,}

3
2018-03-28 00:34



Peki ya ä å ö Ä Å Ö vb? İsveççe isimlerde çok yaygındır. Soyadı O'Conner da başarısız olacak ve çift ​​namlulu isimler de sorunları verecek. Bu geçerli isimleri olan insanlar için çok sinir bozucu olacaktır. - Wilt
OConnor gibi isimlerdeki kesme işareti ne olacak? - Fogmeister
benim ifadem geçerli bir isim olarak Michael Jordan O'Reilly Jr. - Steve Kinzey