Soru php sadece pregmatch kullanarak harfler, sayılar, boşluklar ve belirli sembollere izin verir


benim php kullanıyorum preg_match Giriş metinlerini doğrulamak.

if(preg_match('/^[a-zA-Z0-9]+$/', $firstname)) {
}

Ancak bu sadece alfasayısal ve boşluklara izin vermez. Boşluklara, alfa ve sayısal değerlere izin vermek istiyorum. ve (.) ve tire (-)

Lütfen bana yardım edin mi? şimdiden teşekkürler.


25
2018-06-13 11:16


Menşei


Sadece tüm ifadenizi ekleyiniz. - Rikesh


Cevaplar:


kullanım

preg_match('/^[a-z0-9 .\-]+$/i', $firstname)

35
2018-06-13 11:18



teşekkürler, ihtiyacım olan şeyin bu olduğuna inanıyorum - CudoX
Rica ederim .... - Baba
Kural olarak, normal ifadede beyaz bir boşluktan kaçınmaya (genellikle editörünüzün kodlamasına bağlı olarak bir dizi farklı karakteri temsil edebileceğinden) ve açık olarak kullanılmaya eğilimliyim. \040. - HorusKol
@HorusKol Peki bunu nasıl yapıyorsun? - RN Kushwaha
'/^[a-z0-9\040\.\-]+$/i' - HorusKol


Sadece ASCII'ye izin vermek istemiyorsanız, o zaman kullanın Unicode özellikleri:

preg_match('/^[\p{L}\p{N} .-]+$/', $firstname)

\p{L} içindeki herhangi bir harf herhangi dil, Çince, İbranice, Arapça, ... karakterler de eşleşir.

\p{N} her türlü sayısal karakter (örneğin, romen rakamları anlamına gelir)

Hanelere sınırlamak istiyorsanız, o zaman kullanın \p{Nd}


16
2018-06-13 11:23



Uluslararasılaştırmak istiyorsanız, neden kullanmıyorsunuz? \p{N} yerine 0-9 - Casimir et Hippolyte
@CasimiretHippolyte, elbette bu tutarlı olurdu, - stema
PHP'de düzgün bir şekilde çalışması için bir 'u' değiştirici eklemeniz gerektiğine inanıyorum. Bunun gibi: preg_match ('/ ^ [\ p {L} \ p {N} .-] + $ / u', $ firstname) - Larpon
@Larpon, Unicode özellikleri olmadan çalışıyoruz u niteleyici. Regex dizeniz UTF8 karakterleri içerdiğinde bu değiştiriciye ihtiyacınız vardır. - stema
@stema ok - PHP 5.5.3'te tam olarak çalışamayacağınız bir örnek veremedim - $firstname değişken, unicode karakterleri içerir. Bu olabilir \p{L} bir anlamda unicode - bilmiyorum :) - Larpon


Burada sadece zor bit çizgi.

Alanlar ve noktalar için, onları karakter sınıfınıza ekleyebilirsiniz, böylece:

'/^[a-zA-Z0-9 .]+$/'

Kolay.

Çizgi biraz daha zordur, çünkü tire gibi bir karakter sınıfında özel bir anlam taşır (zaten bildiğiniz gibi, karakterlerin aralıkları için kullanılırlar) a-z). Bir karakter sınıfında tire belirtmek için, sınıftaki ilk karakter olmalıdır (yani iki karakter arasında olmamalıdır, aksi halde karakter aralığı işareti olarak kabul edilir).

Yani ifaden şöyle olurdu:

'/^[-a-zA-Z0-9 .]+$/'

Umarım yardımcı olur.


2
2018-06-13 11:20



evet bu yardımcı olur. Şimdi bile preg_match işlevi için doğru sözdizimini daha fazla anlıyorum. - CudoX
Çizgi için ilk karakter olması gerekmez, `\` kullanarak - Angel.King.47