PHP Regex Doğrulama

2 Cevap php

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);

2 Cevap

(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 */ }