Tout d’abord, je dirais que j’ai vu beaucoup d’exemples ici et googlé, mais aucun n’a trouvé qui corresponde à toutes les conditions; je cherche un match correspondant au top 3 et non à un peu entre les deux… .. Merci de me faire savoir comment tous endroit.
(xxx)xxxxxxx
(xxx) xxxxxxx
(xxx)xxx-xxxx
(xxx) xxx-xxxx
xxxxxxxxxx
xxx-xxx-xxxxx
Utilisant comme:
const string MatchPhonePattern =
@"\(?\d{3}\)?-? *\d{3}-? *-?\d{4}";
Regex rx = new Regex(MatchPhonePattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
// Find matches.
MatchCollection matches = rx.Matches(text);
// Report the number of matches found.
int noOfMatches = matches.Count;
// Report on each match.
foreach (Match match in matches)
{
tempPhoneNumbers= match.Value.ToString(); ;
}
EXEMPLE DE SORTIE:
3087774825
(281)388-0388
(281)388-0300
(979) 778-0978
(281)934-2479
(281)934-2447
(979)826-3273
(979)826-3255
1334714149
(281)356-2530
(281)356-5264
(936)825-2081
(832)595-9500
(832)595-9501
281-342-2452
1334431660
\(?\d{3}\)?-? *\d{3}-? *-?\d{4}
public bool IsValidPhone(string Phone)
{
try
{
if (string.IsNullOrEmpty(Phone))
return false;
var r = new Regex(@"^\(?([0-9]{3})\)?[-.●]?([0-9]{3})[-.●]?([0-9]{4})$");
return r.IsMatch(Phone);
}
catch (Exception)
{
throw;
}
}
Pour ajouter à toutes les suggestions ci-dessus, voici mon RegEx qui appliquera les normes NANP:
((?:\(?[2-9](?(?=1)1[02-9]|(?(?=0)0[1-9]|\d{2}))\)?\D{0,3})(?:\(?[2-9](?(?=1)1[02-9]|\d{2})\)?\D{0,3})\d{4})
Cette expression régulière applique les règles standard du PNNA, telles que N11 codes are used to provide three-digit dialing access to special services
, et les exclut donc à l'aide d'une capture conditionnelle. Il représente également jusqu'à 3 caractères non numériques (\D{0,3}
) entre les sections, car j'ai déjà vu des données géniales.
À partir des données de test fournies, voici le résultat:
3087774825
(281)388-0388
(281)388-0300
(979) 778-0978
(281)934-2479
(281)934-2447
(979)826-3273
(979)826-3255
(281)356-2530
(281)356-5264
(936)825-2081
(832)595-9500
(832)595-9501
281-342-2452
Notez que deux exemples de valeurs ont été omis car ils n'étaient pas des numéros de téléphone valides selon les normes du PNNA: l'indicatif régional commence par 1
1334714149
1334431660
La règle à laquelle je fais référence se trouve sur la page des indicatifs régionaux du site Web de la NANPA nationale, qui indique: The format of an area code is NXX, where N is any digit 2 through 9 and X is any digit 0 through 9.
Aide-toi. Ne pas utiliser une regex pour cela. Google publie une excellente bibliothèque pour gérer ce cas d'utilisation spécifique: libphonenumber . Il y a une démo online de la lib .
public static void Main()
{
var phoneUtil = PhoneNumberUtil.GetInstance();
var numberProto = phoneUtil.Parse("(979) 778-0978", "US");
var formattedPhone = phoneUtil.Format(numberProto, PhoneNumberFormat.INTERNATIONAL);
Console.WriteLine(formattedPhone);
}
Essayez d’écrire ce code, vous obtiendrez ce que vous cherchez.
private static List<String> GetValidPhoneNumber(string input,string pattern)
{
var regex = new Regex(pattern);
var matchs = regex.Matches(input);
var validPhoneNumbers = new List<String>();
foreach(Match match in matchs)
{
if(match.Success)
{
validPhoneNumbers.Add(match.Value);
}
}
return validPhoneNumbers;
}
Ou essayez ce code:
private static List <string>GetValidNumber(string input,string pattern)
{
var regex = new Regex(pattern);
var matches = regex.Matches(input);
return (from Match Match in matches where Match.Success select Match.Value).ToList();
}