Nasıl alnums ve tire bir dize maç regex, ama hangi başlamak ya da bir çizgi ile bitmiyor?

2 Cevap php

('-') Ama başlamak ya da bir çizgi ile sona olmayabilir ben sadece alfa-sayısal değerler ve tire içerebilir 1-32 karakter dizesi doğrularken bazı kod var.

Ben PCRE düzenli ifadeler kullanarak & ediyorum PHP (PHP parçası olsa da, bu durumda gerçekten önemli değildir).

Şu anda pseudo-kod şöyle görünür:

if (match("/^[\p{L}0-9][\p{L}0-9-]{0,31}$/u", string) 
    and
    not match("/-$/", string))

   print "success!"

'-' Yani, ben dize doğru içindekiler olduğunu, bir birlikte olmanın değil ilk kontrol ediyorum ve doğru uzunlukta olup, ve sonra onu bir sona olmadığını görmek için başka bir test koşuyorum '-'.

Tek bir PCRE düzenli ifadeye içine bu birleştirme herhangi bir öneriniz?

Ben İleriye / görünüm arkasında iddialar kullanarak denedim ama işe alamadım.

2 Cevap

Bu normal ifade deneyin:

/^[\p{L}0-9](?:[\p{L}0-9-]{0,30}[\p{L}0-9])?$/u

Ve göz etrafında iddialarını kullanmak istiyorsanız:

/^[\p{L}0-9][\p{L}0-9-]{0,31}$(?<!-)/u

Biraz alternatif bir yaklaşım tek parça karakter sınıfı tutmak ve tire izin vermek istemediğiniz noktaları hakkında özel olmak olacaktır.

/^(?!-)[\p{L}0-9-]{1,32}(?<!-)$/Du

Ayrıca herkes her zaman unutmak gibi görünüyor D değiştirici unutmayın.

Son olarak, sadece emin olmak için, \pL a-zA-Z daha fazla maç olacağını biliyoruz, değil mi? Sadece kontrol.