PHP PCRE'nin Sorunları

4 Cevap php

Ben PHP PCRE'nin ile ilgili bir sorun yaşıyorum ve ben POSIX'e alışkınım, ben ne yapıyorum yanlış hakkında çok emin değilim. Temel olarak, bu işlev 10 numaraları virgülle ayırarak kadar eşleştirme. Ancak, o da ben neden göremiyorum dize sdf (ve muhtemelen diğerleri), eşleştirme oluyor. Herkes bana yardımcı olabilir misiniz?

$pattern='^\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?\d{0,5},? ?^';

$leftcheck=preg_match($pattern, $leftmodules);
$centercheck=preg_match($pattern, $centermodules);
$rightcheck=preg_match($pattern, $rightmodules);

if(!$leftcheck OR !$centercheck OR !$rightcheck)
{
$editpage = $_SERVER['HTTP_REFERER'].'?&error=1';
die("Location:$editpage");
}

4 Cevap


: Ben şu varsayarak yaşıyorum

  • Alanı ya da orada olabilir veya olmayabilir.
  • Sayılar herhangi bir uzunlukta olabilir.
  • Sadece sayılar, boşluklar ve virgül en izin verilir.
  • Onlara izin verilir sonra bir numarası olmadan virgül Firar.
  • Virgülle ayrılmış 1 ile 10 arasında numaralar Tamam.

Göz önüne alındığında:

$pattern = '/^(\d+,* *){1,10}$/';

çalışır.

Görebildiğim kadarıyla, sağlanan düzenli ifade anything bunu içine geçecek maç olacak. İşte neden

\d{0,5}     #\d matches any digit character, while {0,5} means the
            #preceding character must be repeated between **0** and five times

Yani düzenli ifade esasen kısa devre olduğunu. Motoru dizenin ilk karakterini görmek ve bir rakam 0 kez tekrar edilmiştir "diyor? Evet? Tamam, bu bir maç var!

Ben senin numarası sadece virgülle ayırarak eğer böyle bir şey yapmak gerektiğini düşünüyorum

$pattern = '^\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5},\d{0,5}$';

Bunu geçerli olması için iki eşit semboller arasındaki desen içermesi gerekir. İnsanlar genellikle kullanmak /.

$pattern = '/some pattern/';

Eğer sonunda başlangıç ​​ve $ at ^ olmasını istediğiniz her şeyi eşleşecek. Için sdf uyan neden bu yanlış Başlarken muhtemelen.

$pattern = '/^whole pattern match$/';

Bu sayılar ayrılmış olacak nasıl biraz kafa karıştırıcı. Bu virgülle mi? Her ikisinde de sorun var mı? Ne hiçbiri hakkında? İşte benim en iyi tahminim olsa bulunuyor.

$pattern = '/^\d{,5}[, ](\d{,5}[, ]){,9}$/';