Innanzitutto ti mancano i delimitatori del pattern: un pattern perl compatible e' racchiuso da due caratteri (uguali o simmetrici) che lo delimitano. In genere si usano gli slash, ma la scelta e' ampia, quindi
codice:
$pattern="\b\d{1,4}\b"; // ERRATO
codice:
$pattern="/\b\d{1,4}\b/"; // CORRETTO
In secondo luogo quel pattern non verifica che il valore contenga SOLO un numero tra 1 e 4 cifre, controlla che il valore CONTENGA un numero tra 1 e 4 cifre, infatti se inserisci il valore "testotestotestotesto 222" il controllo viene passato (perche' effettivamente un numero di 3 cifre c'e').
Pattern corretto (con le ancore di inizio e fine stringa):
codice:
$pattern = "/^\d{1,4}$/";