Sert regex ile yardıma ihtiyacı

3 Cevap php

THomas veya Thomas ama Thomas Anderson (Thomas anderson çok) geçerli olacaktır: Ben bir dize sadece harfler (az) içeren ve ilk harfi büyük olduğunu, sizin gibi büyük bir kelime 2 mektup sahip olamıyorsak denetleyen bir regex ihtiyacınız

bak:

The Magician Of The Elfs geçerli olurdu ama ThE MaGiCiAN oF ThE ELFS

if (!preg_match("??", $name)) {
   echo "Invalid name!";
}

umarım anlarsın!

Tomasz

Geçersiz:

MaGIciaN Of The ELFz
THomas anderson

Geçerli:

Magician of the elfs
Magician Of the Elfs
Magician of The elfs
Thomas Anderson
Thomas anderson

Basically i dont want it to be possible to have more than 1 capitalized letter in a word, not sentence.

3 Cevap

Ayrıca onun Unicode character properties tarafından karakteri tanımlayabiliriz:

/^\p{Lu}\p{Ll}*(?:\s+\p{Lu}\p{Ll}*)*$/

Edit Eğer şartları değişti beri, bu düzenli ifadeye deneyin:

/^[\p{Lu}\p{Ll}]\p{Ll}*(?:\s+[\p{Lu}\p{Ll}]\p{Ll}*)*$/

Şimdi ilk karakter veya her kelime büyük harf veya küçük harf olabilir.

'/^[A-Z][a-z]+( [A-Z][a-z]+)*$/'

Denenmemiş olsa.

EDIT Oh, belki de ben sorunuzu yanlış anladım. Yukarıdaki iki bir minimum kelime uzunluğu varsayar. "John A" veya "A Horse" geçerli mi? Bu durumda: '/^[A-Z][a-z]*( [A-Z][a-z]*)*$/'.


Güncelleme ihtiyaçlarına göre:

'/^[A-Z][a-z]*( [A-Za-z][a-z]*)*$/'

Doğrular one küçük harflerin herhangi sayıda harfle. Bundan sonra, dizinin herhangi bir sayı: boşluk, (muhtemelen bir büyük harf), küçük harflerin herhangi bir sayıda (her alan için toplamda en az bir harf).

Vay. \b, beyler.

if matches /\B[A-Z]/ then invalid

ya da farkında Unicode olduğu,

if matches /\B\p{Lu}/ then invalid

Sen The (Magic) Elf olarak geçerli gibi dizeleri bırakarak önlemek için, ilk olarak bütün dize eşleşmeleri /^[\p{Lu}\p{Ll}\s]$/ sağlamak isteyebilirsiniz.