Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Regular Espression per numero telefono o fax internazionale
Forum - C# / VB.NET - Regular Espression per numero telefono o fax internazionale

Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 17:05
Mercoledì, 28/04/2021
Utilizzando regex
volevo testare se l'utente inseriva correttamente un numero telefonico o un numero di fax  (che potrebbe essere anche un numero internazionale)
Così pensavo di utilizzare questa espressione:

Codice sorgente - presumibilmente Plain Text

  1. ^([0-9\s\-]{7,})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$



l'espressione va bene se l'utente inserisce uno dei seguenti esempi:
00-776-996189
0776996189

ma non va bene se inserisce:  +776996189
oppure +776-996189

Come posso fare perché possa considerare anche l'eventuale segno + iniziale al posto dei due 00 internazionali??
Grazie di nuovo a tutti.

Ultima modifica effettuata da alip1 il 28/04/2021 alle 17:06
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1320
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 11:31
Giovedì, 29/04/2021
Conosco poco le regular expression, che sono un vero e proprio linguaggio https://docs.microsoft.com/en-us/dotnet/standard/base-types ....
La tua espressione non sembra costruita per lo scopo che richiedi, infatti accetta tranquillamente "-776-996189".
Non ho le competenze per modificarla in modo che accetti solo numeri telefonici, ma aggiungendo il più tra i caratteri validi funzionerà anche con il più:

Codice sorgente - presumibilmente Plain Text

  1. ^([0-9\s\-\+]{7,})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$



Il problema è che il numero sarà valido anche se il più è all'interno del numero...

In VB.Net per ottenere quanto richiedi, si può scrivere una funzione che restituisce true o false, dato un numero telefonico
Codice sorgente - presumibilmente VB.NET

  1. Function TelNumber(numero As String)
  2.     Dim validi As String = "0123456789-+" ' caratteri accettati
  3.     numero = numero.Replace(" ", "") ' rimuovo eventuali spazi contenuti nel numero
  4.     If numero.Substring(0, 1) = "-" Then Return False ' c'è un meno all'inizio
  5.     If numero.IndexOf("+") > 0 Then Return False ' c'è un più all'interno del numero
  6.     For i = 0 To numero.Length - 1
  7.         If Not validi.Contains(numero.Substring(i, 1)) Then Return False ' è stato incontrato un carattere non valido
  8.     Next
  9.     Return True ' tutte le condizioni sono rispettate
  10. End Function


per richiamare la funzione:

Dim ris as boolean = TelNumber("+776-996189")

ris diventerà true o false in accordo con il numero passato

oppure:
Codice sorgente - presumibilmente Delphi

  1. If TelNumber("+776-996189") Then
  2.     MessageBox.Show("il numero è valido")
  3. Else
  4.     MessageBox.Show("il numero non è valido")
  5. End If


Ultima modifica effettuata da Carlo il 29/04/2021 alle 12:42


in programmazione tutto è permesso
PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 12:46
Venerdì, 07/05/2021
Testo quotato

Postato originariamente da Carlo:

Conosco poco le regular expression, che sono un vero e proprio linguaggio https://docs.microsoft.com/en-us/dotnet/standard/base-types ....
La tua espressione non sembra costruita per lo scopo che richiedi, infatti accetta tranquillamente "-776-996189".
Non ho le competenze per modificarla in modo che accetti solo numeri telefonici, ma aggiungendo il più tra i caratteri validi funzionerà anche con il più:

Codice sorgente - presumibilmente Plain Text

  1. ^([0-9\s\-\+]{7,})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$



Il problema è che il numero sarà valido anche se il più è all'interno del numero...

In VB.Net per ottenere quanto richiedi, si può scrivere una funzione che restituisce true o false, dato un numero telefonico
Codice sorgente - presumibilmente VB.NET

  1. Grazie semplice ed ottimo:k:
  2. Function TelNumber(numero As String)
  3.     Dim validi As String = "0123456789-+" ' caratteri accettati
  4.     numero = numero.Replace(" ", "") ' rimuovo eventuali spazi contenuti nel numero
  5.     If numero.Substring(0, 1) = "-" Then Return False ' c'è un meno all'inizio
  6.     If numero.IndexOf("+") > 0 Then Return False ' c'è un più all'interno del numero
  7.     For i = 0 To numero.Length - 1
  8.         If Not validi.Contains(numero.Substring(i, 1)) Then Return False ' è stato incontrato un carattere non valido
  9.     Next
  10.     Return True ' tutte le condizioni sono rispettate
  11. End Function


per richiamare la funzione:

Dim ris as boolean = TelNumber("+776-996189")

ris diventerà true o false in accordo con il numero passato

oppure:
Codice sorgente - presumibilmente Delphi

  1. If TelNumber("+776-996189") Then
  2.     MessageBox.Show("il numero è valido")
  3. Else
  4.     MessageBox.Show("il numero non è valido")
  5. End If



PM Quote