Наведені вище рішення є кращими, особливо якщо використовується Java, і зустрічається більше номерів із понад 10 цифр, таких як префікс міжнародного коду або додаткові номери номерів. Це рішення є базовим (я новачок у світі регулярних виразів) і розроблено з урахуванням телефонних номерів США і корисно лише для рядків із лише 10 числами, можливо, з деякими символами форматування, або, можливо, без символів форматування (лише 10 цифр ). Як такий, я рекомендую це рішення лише для напівавтоматичних застосувань. Я особисто вважаю за краще зберігати номери як лише 10 чисел без форматування символів, але я також хочу мати можливість конвертувати або очистити телефонні номери у стандартний формат, як звичайні люди, і програми / телефони розпізнаватимуть їх миттєво за бажанням.
Я натрапив на цю публікацію, шукаючи щось, що я міг би використати з додатком для очищення тексту, який має можливості PCRE Regex (але без функцій Java). Я опублікую це тут для людей, які можуть використовувати просте чисте рішення Regex, яке може працювати в різних редакторах тексту, засобах очищення, розширювачах або навіть у деяких менеджерах буфера обміну. Я особисто використовую Sublime і TextSoap. Це рішення було розроблено для Text Soap, оскільки воно живе в рядку меню та містить спадне меню, де ви можете запускати дії з маніпулювання текстом над тим, що вибрано курсором або що є в буфері обміну.
Мій підхід - це, по суті, два заміни / пошуку та заміни регулярних виразів. Кожен пошук і заміна підстановки включає два регулярні вирази, один для пошуку та другий для заміни.
Заміна / пошук і заміна # 1
- Перша заміна / пошук і заміна позбавляє нечислові числа з 10-значного числа в інший рядок у 10-значний рядок.
Перша заміна / регулярний вираз пошуку :\D
- Цей рядок пошуку відповідає всім символам, що не є цифрою.
Перша заміна / Заміна регулярного виразу: "" (нічого, навіть пробіл)
- Залиште поле заміни повністю порожнім, не повинно бути пробілів, включаючи пробіли. Це призведе до видалення всіх відповідних нецифрових символів. До цієї операції вам слід було ввести 10 цифр + символів форматування і вийти з 10 цифрами без форматування символів.
Заміна / пошук і заміна # 2
- Друга заміна / пошук і заміна пошук частини операції захоплення групи для коду області
$1, що уловлює групи для другого набору з трьох чисел $2, а останній захоплення групи за останній набір з чотирьох чисел $3. Регулярний вираз для замісної частини операції вставляє форматування телефонного номера США між захопленою групою цифр.
Друга заміна / регулярний вираз пошуку :(\d{3})(\d{3})(\d{4})
Друга заміна / Заміна регулярного виразу:\($1\) $2\-$3
Зворотний слеш \екранує спеціальні символи (, ), (<-whitespace), і -так як ми вставляючи їх між нашими захопленими числами в групах захоплення $1, $2і $3для цілей форматування номера телефону в США.
У TextSoap я створив спеціальний очищувач, який включає дві дії заміни, тому на практиці він відчуває себе ідентичним виконанню сценарію. Я впевнений, що це рішення можна вдосконалити, але я сподіваюся, що складність буде значно зростати. Покращена версія цього рішення вітається як досвід навчання, якщо хтось хоче додати до цього.