Ben adlarını doğrulamak için PHP kullanmak gerekiyor, ve ben sadece (-
), ({[(2) (_
) alt çizgi ve dönem onları çizgi yanı sıra, alfanümerik kullanmak istiyorum ]})
Bu doğru mu?
preg_match("/[A-Za-z0-9_-.]/",$text);
(Ben zaten aksi beri soran olmaz, şüpheli varsayalım rağmen) Hayır öyle değil. :)
Bir karakter grubunu tanımlarken, çizgi tüm karakterleri, yani yapmanız A-Z
Ancak, aynı zamanda _-.
yapmak A ve Z arasındaki tüm karakterler anlamına gelir, tıpkı bir dizi tanımlamak için kullanılır _ ile. (Ben olduğunu bilmiyorum, ama bir ASCII tablosunda o kadar bakabilirsiniz). Genellikle ilk ya da son (ama diğer yaratıcı yollar yorumları ;) bakınız) bir karakter aralığı olarak yorumlanamaz nerede bir karakter grubuna bir çizgi eşleşmesini sağlamak için, her yerde yerleştirilebilir gelmiştir.
preg_match("/^[A-Za-z0-9_.-]+$/",$text);
Açıklamalarda belirttiği gibi, bu dizenin başında eşleşen ne ^, var (emin eşleşen aralığının dışında hiçbir charachters orada yapmak için çok çapa gerekir, ve dize sonu maçları $, için vardır .) Ayrıca birden fazla karakter maç emin olmak gerekir. (Eğer boş dizeleri izin vermek istiyorsanız ya da *) Yani, bir veya daha fazla karakter, yani bir orada + eklemek.
HTH
Sen, bir ucunu başında da desen demirlemek için şu anda o kadar uzun sadece tek bir geçerli karakter ve geri kalanı geçersiz olarak orada $ metni eşleştirmek istiyorum gerekir. Bunu kullanın:
if (preg_match('/^[\w.-]+$/', $text)) { /* valid */ }
\ W [0-9A-Za-Z_] olarak aynı şeydir. Bunu yapmak için başka bir yol desen ters ve geçersiz karakterler için arama ve hiçbiri eşleştirilir kontrol etmek olacaktır:
if (!preg_match('/[^\w.-]/', $text)) { /* valid */ }