Domanda

Sto avendo un problema con PHP PCRE, e io sono abituato a POSIX, quindi non sono troppo sicuro di quello che sto facendo male. Fondamentalmente, questa funzione è corrispondenti fino a 10 numeri separati da virgole. Tuttavia, è anche corrispondente alla sdf stringa (e probabilmente molti altri), che non vedo il motivo di. Qualcuno mi può aiutare?

$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");
}
È stato utile?

Soluzione

^\d{1,5}(, *\d{1,5}){0,9}$

Altri suggerimenti

Sto assumendo il seguente:

  • spazi può essere o non essere lì.
  • I numeri possono essere di qualsiasi lunghezza.
  • Solo numeri, spazi e virgole di sono ammessi.
  • Trailing virgole senza un numero dopo di loro sono ammessi.
  • tra 1 e 10 numeri separati da virgole sono ok.

Premesso che:

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

opere.

Da quello che posso vedere, l'espressione regolare che hai fornito corrisponderà nulla si passa in esso. Ecco perché

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

Quindi, l'espressione regolare è essenzialmente corto circuito. Il motore di vedere il primo carattere della stringa e dice "è una cifra stato ripetuto 0 volte? Sì? OK, si tratta di una partita!

Credo che se il tuo numero sono separati solo da virgole qualcosa come questo dovrebbe farlo

$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}$';

È necessario contenere il modello tra due simboli uguali per essere valida. La gente di solito usano /.

$pattern = '/some pattern/';

Per abbinare il tutto si desidera avere ^ all'inizio e $ alla fine. Ottenere questo sbagliato è probabilmente il motivo per cui il vostro sdf è stato corrispondente.

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

E 'un po' di confusione come saranno separati i numeri. E 'virgola o spazio? È sia OK? Che dire di nessuno? Ecco la mia ipotesi migliore però.

$pattern = '/^\d{,5}[, ](\d{,5}[, ]){,9}$/';
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top