かなり単純なアプローチは、正規表現を使用することです。受け入れている電話番号の種類に応じて、数字 (米国のみの場合、合計で 7 または 10 になる可能性があることがわかっています。先頭に「1」が付く可能性があります) と潜在的な区切り文字を検索する正規表現を作成できます。それらの間 (ピリオド、ダッシュ、括弧、スペースなど)。
正規表現に対して照合を実行したら、ロジックを記述して、実際に取得したものを判断し、そこからフォーマットする必要があります。
編集:非常に基本的な例を追加したかっただけです(これは、上に投稿したすべての例で機能するわけではありません)。正規表現の書き方によっては、数値以外の文字を削除するという Geoff の提案が少し役立つかもしれません。
Regex regex = new Regex(@"(?<areaCode>([\d]{3}))?[\s.-]?(?<leadingThree>([\d]{3}))[\s.-]?(?<lastFour>([\d]{4}))[x]?(?<extension>[\d]{1,})?");
string phoneNumber = "701 123-4567x324";
Match phoneNumberMatch = regex.Match(phoneNumber);
if(phoneNumberMatch.Success)
{
if (phoneNumberMatch.Groups["areaCode"].Success)
{
Console.WriteLine(phoneNumberMatch.Groups["areaCode"].Value);
}
if (phoneNumberMatch.Groups["leadingThree"].Success)
{
Console.WriteLine(phoneNumberMatch.Groups["leadingThree"].Value);
}
if (phoneNumberMatch.Groups["lastFour"].Success)
{
Console.WriteLine(phoneNumberMatch.Groups["lastFour"].Value);
}
if (phoneNumberMatch.Groups["extension"].Success)
{
Console.WriteLine(phoneNumberMatch.Groups["extension"].Value);
}
}