Oppure

Loading
28/04/21 15:05
alip1
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:

 ^([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 28/04/21 15:06
aaa
29/04/21 9:31
Carlo
Conosco poco le regular expression, che sono un vero e proprio linguaggio 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ù:

^([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
Function TelNumber(numero As String)
    Dim validi As String = "0123456789-+" ' caratteri accettati
    numero = numero.Replace(" ", "") ' rimuovo eventuali spazi contenuti nel numero
    If numero.Substring(0, 1) = "-" Then Return False ' c'è un meno all'inizio
    If numero.IndexOf("+") > 0 Then Return False ' c'è un più all'interno del numero
    For i = 0 To numero.Length - 1
        If Not validi.Contains(numero.Substring(i, 1)) Then Return False ' è stato incontrato un carattere non valido
    Next
    Return True ' tutte le condizioni sono rispettate
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:
If TelNumber("+776-996189") Then
    MessageBox.Show("il numero è valido")
Else
    MessageBox.Show("il numero non è valido")
End If
Ultima modifica effettuata da Carlo 29/04/21 10:42
in programmazione tutto è permesso
07/05/21 10:46
alip1
Postato originariamente da Carlo:

Conosco poco le regular expression, che sono un vero e proprio linguaggio 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ù:

^([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
Grazie semplice ed ottimo:k:
Function TelNumber(numero As String)
    Dim validi As String = "0123456789-+" ' caratteri accettati
    numero = numero.Replace(" ", "") ' rimuovo eventuali spazi contenuti nel numero
    If numero.Substring(0, 1) = "-" Then Return False ' c'è un meno all'inizio
    If numero.IndexOf("+") > 0 Then Return False ' c'è un più all'interno del numero
    For i = 0 To numero.Length - 1
        If Not validi.Contains(numero.Substring(i, 1)) Then Return False ' è stato incontrato un carattere non valido
    Next
    Return True ' tutte le condizioni sono rispettate
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:
If TelNumber("+776-996189") Then
    MessageBox.Show("il numero è valido")
Else
    MessageBox.Show("il numero non è valido")
End If
aaa