2012-01-31 19 views
22

Vorrei verificare se gli utenti inseriscono il numero di telefono corretto, con l'aiuto di jQuery, finora ho avuto modo di questa fase:Verifica Se sono stati immessi solo valori numerici nell'input. (JQuery)

var phone = $("input#phone").val(); 
if (phone !== "") { 
    //Check if phone is numeric 
    $("label#phone_error").show(); //Show error 
    $("input#phone").focus(); //Focus on field 
    return false; 
} 

In sostanza si verifica se è stato immesso il numero di telefono e se fosse , Vorrei verificare se si tratta di un valore numerico e se non è visualizzato i messaggi di errore. Qualcuno può aiutare con il controllo se è numerico?

+5

Prendere in considerazione che i numeri di telefono in realtà non sono un numero, ma una stringa contenente numeri. Gli utenti scrivono i numeri in modi strani e se si dispone di un'applicazione globale, anche più strana. Ricorda che i codici paese iniziano con 00 o +, il + è valido come numero di telefono, ma non è un numero valido. Scusa se sono fuori tema qui ma ho speso troppo tempo a inserire "non un numero valido" sui siti web –

+0

Si potrebbe anche arrivare fino a rimuovere caratteri che non sono numeri e quindi costruire l'input come desidero usare un'istruzione switch che usi jquery '.val()' e '.length()' 'var valLength = $ (this) .val(). length;' nei tuoi condizionali. 'switch (valLength) {' quindi aggiungi casi ai valori di lunghezza che controllano i valori numerici o usano un'istruzione regex condizionale if per identificare se il valore è numerico con il valore 'case:' nella tua matrice di lunghezza. –

+0

Perché/perché non è regexp è meglio di JQuery isNumeric()? –

risposta

54

Prova questo ... sarà fare in modo che la stringa "telefono" contiene solo cifre e dovrà contenere almeno una cifra

if(phone.match(/^\d+$/)) { 
    // your code here 
} 
+0

Questa è una buona opzione poiché jQuery.isNumeric() non convalida i valori lunghi (Int64). –

+0

Penso che sia importante menzionare quello riguardante la domanda originale dei PO su come assicurarsi che un numero di telefono abbia solo valori di valori estranei (Int64). Un modulo di immissione del numero di telefono avrà in cima 30 ingressi. Per un ingresso telefonico negli Stati Uniti, un ingresso probabilmente ridicolmente lungo può essere uguale a ... (555) 555-5555 ext: (5555). Pertanto, nella nostra stringa di esempio vengono utilizzati un totale di posizionamenti di 25 caratteri. Un reg ex con restrizione di 25 posizionamenti è tutto ciò che dobbiamo garantire (int64) non è utilizzato da qualcuno che utilizza il modulo in modo improprio. Basta dire ... –

3

http://docs.jquery.com/Plugins/Validation/CustomMethods/phoneUS

verificare che fuori. Dovrebbe essere proprio quello che stai cercando. Un plug-in di convalida del telefono americano per jQuery.

Se vuoi farlo da solo, avrai una buona dose di lavoro. Controlla la funzione isNaN(). Ti dice se non è un numero. Volete anche rispolverare le vostre espressioni regolari per la convalida. Se stai usando RegEx, puoi andare senza isNaN(), come testerai comunque.

18

c'è una funzione built-in in jQuery per controllare questo (isNumeric), in modo da provare la seguente:

var phone = $("input#phone").val(); 
    if (phone !== "" && !$.isNumeric(phone)) { 
    //Check if phone is numeric 
    $("label#phone_error").show(); //Show error 
    $("input#phone").focus(); //Focus on field 
    return false; 
} 
+0

Fantastico, non ci siamo resi conto che era stato aggiunto a jQuery. Dovrebbe essere '$ .isNumeric'? –

+0

hai ragione, questa funzione è stata aggiunta dal v 1.7 –

+0

L'ho provata ma non funziona se hai valori lunghi (Int64), quindi funzionerebbe solo con valori int normali. –

3

ho usato questo:

jQuery.validator.addMethod("phoneUS", function(phone_number, element) { 
phone_number = phone_number.replace(/\s+/g, ""); 
return this.optional(element) || phone_number.length > 9 && 
    phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/); 
}, "Please specify a valid phone number"); 
1

per il futuro vis itors, è possibile aggiungere questo functon che permettono all'utente di inserire solo i numeri: si avrà solo aggiungere jQuery e il nome della classe all'ingresso controllare che in http://jsfiddle.net/celia/dvnL9has/2/

$('.phone_number').keypress(function(event){ 
var numero= String.fromCharCode(event.keyCode); 
var myArray = ['0','1','2','3','4','5','6','7','8','9',0,1,2,3,4,5,6,7,8,9]; 
index = myArray.indexOf(numero);// 1 
var longeur= $('.phone_number').val().length; 
if(window.getSelection){ 
text = window.getSelection().toString(); 
} if(index>=0&text.length>0){ 
    }else if(index>=0&longeur<10){ 
    }else {return false;} }); 
2

Ho usato questo per verificare se tutte le caselle di testo aveva valori numerici:

if(!$.isNumeric($('input:text').val())) { 
     alert("All the text boxes must have numeric values!"); 
     return false; 
    } 

o per uno:

$.isNumeric($("txtBox").val()); 

Disponibile con jQuery 1.7.

1
if (!(/^[-+]?\d*\.?\d*$/.test(document.getElementById('txtRemittanceNumber').value))){ 
      alert('Please enter only numbers into amount textbox.') 
      } 
      else 
      { 
      alert('Right Number'); 
      } 

Spero che questo codice possa essere di aiuto.

in questo codice se la condizione restituisce true se esiste un numero decimale legale di un numero qualsiasi di posizioni decimali. e l'avviso verrà visualizzato con il messaggio "Numero corretto", altrimenti verrà visualizzato un popup di avviso con il messaggio "Inserire solo numeri in una casella di testo.".

Grazie ... :)

0

Questa non è una risposta esatta alla domanda, ma un altra opzione per la convalida del telefono, è quello di garantire il numero viene immesso nel formato vi aspettate.

Questa è una funzione su cui ho lavorato quando si imposta l'evento onInput, elimina gli input non numerici e inserisce automaticamente i trattini nel punto "giusto", assumendo che xxx-xxx-xxxx sia l'output desiderato .

<input oninput="formatPhone()">

function formatPhone(e) { 
    var x = e.target.value.replace(/\D/g, '').match(/(\d{0,3})(\d{0,3})(\d{0,4})/); 
    e.target.value = !x[2] ? x[1] : x[1] + '-' + x[2] + (x[3] ? '-' + x[3] : ''); 
} 
1

Ho usato questo tipo di convalida .... controlla il testo incollato e se contiene alfabeti, mostra un errore per l'utente e quindi chiara la scatola dopo il ritardo per l'utente di controllare il testo e apportare le modifiche appropriate.

$('#txtbox').on('paste', function (e) { 
      var $this = $(this); 
      setTimeout(function (e) { 
       if (($this.val()).match(/[^0-9]/g)) 
       { 
        $("#errormsg").html("Only Numerical Characters allowed").show().delay(2500).fadeOut("slow");      
        setTimeout(function (e) { 
         $this.val(null); 
        },2500); 
       }     
      }, 5); 
     }); 
Problemi correlati