Мне нужно регулярное выражение для преобразования номера телефона США в ссылку

По сути, поле ввода - это просто строка. Люди вводят свой номер телефона в различных форматах. Мне нужно регулярное выражение, чтобы найти и преобразовать эти числа в ссылки.

Примеры ввода:

(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. Итак, я готов "просто заставить его работать".

Вот что у меня есть в 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:
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);
amp;'>
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);
amp;</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-значный номер и связывает его таким образом. Однако, если указан код города, он не сопоставляется. Есть идеи, что я делаю не так?

Второе редактирование:

Работай сейчас. Все, что я сделал, это удалил\b с начала строки.

Ответы на вопрос(3)

Ваш ответ на вопрос