Recentemente ho avuto lo stesso problema. Mi sono aggirato usando type = "tel" invece di type = "text" o type = "number". Utilizzando 'tel' sono riuscito a ottenere una sola tastiera numerica su dispositivi mobili e sono ancora in grado di utilizzare my pattern = "[0-9 \ -] +".
Ecco il codice che ho usato. Spero che questo sia abbastanza buono per quello che ti serve. Hanno davvero bisogno di fare in modo che l'aggiunta di un attributo di pattern abbia la priorità su qualsiasi modello predefinito impostato dall'attributo type.
<input id='zipcode' name='zipcode' type='tel' pattern="[0-9\-]+" placeholder='Zip-code'>
Naturalmente questo funziona solo se si è interessati trattini e possibilmente parentesi.
I valori per gli ingressi 'numerici 'devono sempre essere numeri in virgola mobile validi e quindi può contenere solo un trattino singolo (ovvero un segno meno) davanti al numero. Vedi http://www.w3.org/TR/html5/infrastructure.html#valid-floating-point-number – icke