(-) Bir dize yalnızca az harf ve rakamları oluşur ve çizgi (_) olmadığını kontrol edecek regex ve tire Need

4 Cevap php

Ben dize yalnızca harfler az, sayılar, alt çizgi (_) ve tire oluşuyorsa kontrol edecek bir regex için arıyorum (-). Bunu denedim ama çalışmıyor:

if (!preg_match('/^a-zA-Z0-9_-$/', $string)) {
  $reg_Error[] = 2;
}

Ayrıca, regex ile uzunluğunu kontrol edebilirsiniz? Eğer değilse, ben sadece PHP ile yapacağız.

4 Cevap

Bir kısa:

/ ^ [\ W-] + $ /

Ben bunu kullanmak:

/^[a-z_\-\d]+$/i

I \w kullanarak değilim neden olarak, PHP PCRE Pattern Reference alınan aşağıdaki alıntı, sen \w kullanılarak olmamalıdır neden açıklamak gerekir Bu durum :

A "word" character is any letter or digit or the underscore character, that is, any character which can be part of a Perl "word". The definition of letters and digits is controlled by PCRE's character tables, and may vary if locale-specific matching is taking place. Örneğin, "fr" (Fransızca) yerelinde, 128 daha büyük bazı karakter kodları aksanlı harfler için kullanılır ve bu \w ile eşleştirilir.

Eğer yerel hakkında endişe istediğiniz sürece, düz karakter sınıfları yerine \w steno kullanmak böylece davranış, bu durumda arzu değildir.

(Örneğin 3 için) minimum uzunluğunu belirtmek istiyorsanız:

/^[a-z_\-\d]{3,}$/i

Eğer minimum ve maksimum uzunluğu hem de belirtmek istiyorum (örneğin 2 ve 5) ise:

/^[a-z_\-\d]{2,5}$/i

Cevaplar kadar doğru bir karakter sınıfını açıklamak / ^[A-Za-z0-9_-]+$ /

Sen uzunluğunu kontrol edebilirsiniz. + ", Önceki bir veya daha fazla" * önceki sıfır veya daha fazlası anlamına gelir "ve {2,4} anlamına gelen" "öncelediği 2 ile 4 tespit edilmiştir.

Eğer olsa, uzunluk bir asal olmak zorundadır belirtebilirsiniz olamaz. Uzunluğu bile olması gerektiğini belirterek mümkün ama non-Önemsiz: / ^(xx){1,3}$ / maçlar xx xxxx veya xxxxxx. Burada sayısı, number of pairs değil, x'es sayısını belirtmektedir

Regex olmalıdır: '^ [\ w \ d-] + $'