基本的に、入力フィールドは単なる文字列です。人々は電話番号をさまざまな形式で入力します。これらの数字を検索してリンクに変換するには、正規表現が必要です。
入力例:
(201) 555-1212
(201)555-1212
201-555-1212
555-1212
ここに私が欲しいものがあります:
<a href="tel:(201)555-1212">(201) 555-1212</a> - Notice the space is gone
<a href="tel:(201)555-1212">(201)555-1212</a>
<a href="tel:201-555-1212">201-555-1212</a>
<a href="tel:555-1212">555-1212</a>
単にスペースを削除するよりも堅牢である必要があることはわかっていますが、従業員が iPhone からアクセスする内部 Web サイト用です。だから、私は「ただそれを機能させたい」と思っています。
これまでの C# の内容は次のとおりです (これは、正規表現について私がどれだけ知っているかを示しているはずです)。
strchk = Regex.Replace(strchk, @"\b([\d{3}\-\d{4}|\d{3}\-\d{3}\-\d{4}|\(\d{3}\)\d{3}\-\d{4}])\b", "<a href='tel:$&'>$&</a>", RegexOptions.IgnoreCase);
これを修正するか、これを行うためのより良い方法を提案することで、誰かが私を助けることができますか?
編集:
みんな、ありがとう。ここに私がこれまでに持っているものがあります:
strchk = Regex.Replace(strchk, @"\b(\d{3}[-\.\s]\d{3}[-\.\s]\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]\d{4}|\d{3}[-\.\s]\d{4})\b", "<a href='tel:$1'>$1</a>", RegexOptions.IgnoreCase);
市外局番 (nnn) を除いて、市外局番と 7 桁の番号の間にスペースがある場合とない場合を除いて、ほぼすべてをピックアップしています。7 桁の番号を取得し、そのようにリンクします。ただし、市外局番を指定した場合は一致しません。私が間違っていることは何か分かりますか?
2番目の編集:
動作するようになりました。私がし\b
たことは、文字列の先頭から を削除することだけでした。