2011-06-09 26 views
5

Bir textarea'nın içeriğini 4 ila 138 karakter arasında olacak şekilde yeniden düzenlemeye çalışıyorum. "" Ben kullanıcı inanıyorum dönüş karakterleri içerecek şekilde yapabilmek istiyor - Ama '/^.{4,138}$/'Yalnızca uzunluk için düzenli ifade - herhangi bir karakter

:

Benim düzenli ifade şudur onları yapmaktan korur. Neleri değiştirmem gerektiğine dair düşünceler?

DÜZENLEME:

Açıkçası metnin uzunluğunu almak için başka yolları da vardır - (strlen ... vb ama özellikle nedeniyle çek doğası gereği regex arıyorum yani bir eklenti olduğunu regex gerektirir

cevap

6

Kullanıcının "." Olduğuna inandığım karakterleri döndürmesini istiyorum. onları yapmaktan korur. Neleri değiştirmem gerektiğine dair düşünceler?

Ya:

  • değişiklik .
  • SINGLE_LINE (aka dotall) regex flag/…/s kullanmak (boşluk/yeni satırlar \s parçası olan, her şey \S parçasıdır) [\s\S] için
+0

[\ s \ S] çalışır - teşekkürler! :) – Dave

6

Neden dize uzunluğunu strlen kullanarak denetlemiyorsunuz? Bir regex yapmaktan çok daha verimli olurdu. Ayrıca, anlamlı hata mesajları verebilirsiniz.

$length = strlen($input); 

if ($length > 138) 
    print 'string too long'; 
else if ($length < 4) 
    print 'string too short'; 
+0

Bu bir eklenti aracılığıyla oluşturulan kod - dışı regex olarak değiştirelim, ben eklenti rewirte gerekirdi. – Dave

+0

(Sorum, "PHP'de bir dizenin uzunluğunu nasıl bulacağımız" değil - özellikle düzenli bir ifade için sorulmuştur.) – Dave

+0

wow. Bu eklenti üzerinde kötü tasarım. –

1

yanı . maç yeni satır olması '/^.{%d,%d}$/s' deneyin.

1

Ya

/^[\s\S]{4,138}$/ 
/^.{4,138}$/s 

veya

satırsonlarını eşleşir.

s bayrak, motoru tek bir satır olarak ele almasını söyler, bu nedenle ., genellikle eşleştiğine ek olarak \n eşleşecektir. Bu da ayrıca m bayrağı kullanmadığınız sürece ^ ve $ (daha doğrusu her hattı sadece başlangıcı/sonu yerine) tüm dize başı ve sonunda eşleşecek neden olmadığını unutmayın.

Here's some more info on regex flags.