Non ho testato bene però potresti provare cosi.
Inoltre ricorda che il field deve stare all'interno di un tag form.codice:<input type="text" name="cap" pattern="[0-9]{5}" maxlength="5" oninput="this.value = this.value.replace(/[^0-9]/g,'')" required />