Domanda

Ho un modulo di un sito Web che richiede l'inserimento di un numero di telefono negli Stati Uniti per scopi di follow-up, e questo è molto necessario in questo caso. Voglio provare a eliminare gli utenti che inseriscono dati spazzatura 330-000-0000 . Ho visto alcune opzioni di terze parti che convalidano i numeri di telefono per te, tuttavia idk se questa è l'opzione migliore per questa situazione. Tuttavia, se tutti avete usato una di queste terze parti e potete fare una raccomandazione che sarebbe molto apprezzata qui.

Tuttavia sto considerando di verificare il numero rispetto a una serie di regole per provare a restringere i numeri di telefono spazzatura ricevuti.

  • non un numero 555
  • non contiene 7 cifre identiche
  • prefisso valido (disponibile immediatamente)
  • non un 123-1234 o 123-4567
  • Immagino di poter contare anche 867-5309 (eh * )

Questo comporterebbe situazioni a cui potresti pensare che non consentirebbe a un utente di inserire il proprio numero di telefono? Potresti pensare ad altre regole che un numero di telefono non dovrebbe contenere? Qualche altro pensiero?

È stato utile?

Soluzione

Mi sembra che tu stia facendo più sforzi in questo di quanto non meriti. Prendere in considerazione:

Se il tuo scopo è quello di proteggerti da numeri di telefono immessi in modo errato, puoi probabilmente catturarne oltre il 90% con un semplice controllo.

Se il tuo scopo è quello di forzare gli utenti a fornire un numero valido indipendentemente dal fatto che vogliano fornire tali informazioni o meno, allora hai intrapreso un'attività senza speranza, anche se sei riuscito ad accedere con precisione al 100%, fino - al secondo database di telco per verificare che il numero esatto inserito sia attualmente attivo, non si ottiene ancora alcuna certezza che il numero che ti hanno fornito sia il proprio. Ancora una volta, un semplice controllo ostacolerà la maggior parte delle persone che immettono numeri falsi, ma coloro che sono disposti a provare più di due o tre volte troveranno un modo per sconfiggere i tuoi tentativi di guadagnare i loro numeri.

Ad ogni modo, un semplice test ti porterà a buoni risultati e entrare in set di regole più complessi richiederà un tempo sempre maggiore e ti offrirà sempre meno benefici (aggiungendo potenzialmente anche falsi positivi, come già mostrato con < !> quot; sette della stessa cifra " e 867-5309 casi).

Altri suggerimenti

Puoi eseguire la convalida del numero di telefono internamente alla tua app utilizzando espressioni regolari. A seconda della lingua, è possibile chiamare una funzione che restituirà true se un numero di telefono fornito corrisponde all'espressione.

In PHP:

function phone_number_is_valid($phone) {
    return (eregi('^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$', $phone));
}

Puoi cercare diverse espressioni regolari online. Ho trovato quello sopra a http://regexlib.com/DisplayPatterns ? & aspx categoryId = 7 amp; cattabindex = 2

Modifica: alcuni siti specifici della lingua per le espressioni regolari:

Se riesci a verificare il prefisso, a meno che tu non abbia davvero, davvero bisogno di conoscere il loro numero di telefono, probabilmente stai facendo quanto è ragionevole.

Amybe dà un'occhiata alle risposte a questa domanda .

867-5309 è un numero di telefono valido assegnato a persone con prefissi diversi.

In Django c'è un bel pacchetto di contrib chiamato localflavor che ha molti codici di convalida specifici per paese, ad esempio codici postali o numeri di telefono. Puoi anche guardare nella fonte per vedere come django gestisce questi per il paese che vorresti usare; Ad esempio: Convalida modulo USA . Questo può essere un grande ricorso per informazioni su paesi di cui conosci poco.

I tuoi clienti possono ancora fare quello che faccio, che è dare il numero locale del film.

Inoltre, 123-1234 o 123-4567 sono solo numeri non validi perché il prefisso inizia con 1, ma 234-5678 o 234-1234 sarebbero effettivamente validi (anche se sembra falso).

Se stai usando solo numeri in formato USA e Canada, penso che la seguente regex potrebbe funzionare: [2-9] [0-9] [0-9] - [2-9] [0-9] [0-9] - [0-9] [0-9] [0-9] [0- 9] & Amp; ! [2-9] [0-9] [0-9] -555- [0-9] [0-9] [0-9] [0-9]

È inoltre necessario tenere conto della composizione a dieci cifre, che ora viene utilizzata in alcune aree: è diversa dalla composizione a lunga distanza (ovvero 303-555-1234, anziché 1-303-555-1234 ). In alcuni punti, un numero di telefono valido è lungo dieci cifre; in altri, sono le sette.

Questi parametri mi sembrano abbastanza belli, potrei anche evitare numeri che iniziano con 911 solo per sicurezza.

Nella mia ricerca che avrei dovuto fare prima >. < Ho scoperto che 7 cifre identiche sono numeri di telefono validi. Quindi posso contare quella regola.

Questa è una funzione rapida che uso (sotto). Ho accesso a un database zipcode che contiene dati di prefisso e prefisso che viene aggiornato mensilmente. Ho spesso pensato di fare un tuffo di dati per confermare l'esistenza del prefisso per il prefisso.

    public static bool isPhone(string phoneNum)
    {
        Regex rxPhone1, rxPhone2;

        rxPhone1 = new Regex(@"^\d{10,}$");
        rxPhone2 = new Regex(@"(\d)\1\1\1\1\1\1\1\1\1");

        if(phoneNum.Trim() == string.Empty)
            return false;

        if(phoneNum.Length != 10)
            return false;

        //Check to make sure the phone number has at least 10 digits
        if (!rxPhone1.IsMatch(phoneNum))
            return false;

        //Check for repeating characters (ex. 9999999999)
        if (rxPhone2.IsMatch(phoneNum))
            return false;

        //Make sure first digit is not 1 or zero
        if(phoneNum.Substring(0,1) == "1" || phoneNum.Substring(0,1) == "0")
            return false;

        return true;

    }

Non so se questo è il posto giusto, è una funzione di formattazione piuttosto che una funzione di validazione, ho pensato di condividerla con la community, forse un giorno sarà utile ..

Private Sub OnNumberChanged()
    Dim sep = "-"
    Dim num As String = Number.ToCharArray.Where(Function(c) Char.IsDigit(c)) _
                                                 .ToArray
    Dim ext As String = Nothing
    If num.Length > 10 Then ext = num.Substring(10)
    ext = If(IsNullOrEmpty(ext), "", " x" & ext)
    _Number = Left(num, 3) & sep & Mid(num, 4, 3) & sep & Mid(num, 7, 4) & ext
End Sub

La mia funzione di validazione è così:

Public Shared Function ValidatePhoneNumber(ByVal number As String)
    Return number IsNot Nothing AndAlso number.ToCharArray. _
                                  Where(Function(c) Char.IsNumber(c)).Count >= 10
End Function

Chiamo quest'ultima funzione @ il metodo OnNumberChanging (number As String) dell'entità.

Per la convalida del telefono statunitense e internazionale ho trovato questo codice il più adatto:

((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$

Puoi trovare una discussione (anche se un po 'datata) qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top