Попытка использовать Regex соответствует номеру телефона iOS с помощью ярлыков iOS

Я создаю ярлык iOS, который начинается с проверки того, хранится ли в буфере обмена скопированный номер телефона.

Пока что мое регулярное выражение следующее:

      ^[\d\()-‑+  ]+$

Хотя при наборе обычного телефонного номера с клавиатуры телефона, например, +972 12-345-6789, он отлично работает; похоже при копировании прямо из дефолтного Phone приложение, оно не находит совпадения.

Я должен упомянуть, что после некоторого копания кажется, что номер телефона, скопированный из приложения Phone, связан с некоторыми дополнительными специальными символами, используемыми для Left-To-Right Embeddingи тому подобное. Использование декодера Unicode дало мне следующую строку:

      ‪+972 12‑345‑6789‬

Я даже не уверен, является ли это причиной, но, возможно, это как-то связано с этим. Если да - могу ли я как-нибудь использовать iOS Shortcutsдекодировать текст буфера обмена в формат Unicode и удалить лишние символы? А если между ними нет связи, в чем еще может быть проблема?

3 ответа

Решение

Вы можете добавить в шаблон поддержку всех этих символов:

      ^[\d()+\p{Zs}\p{Pd}\p{Cf}]+$`

Примечание:

  • \p{Zs} соответствует всем пробелам без табуляции и разрывов строк (добавить \t в скобки, если вам нужно поддерживать TAB)
  • \p{Pd} будет соответствовать любым тире
  • \p{Cf} совпадает с двунаправленными метками и другими символами формата управления.

Альтернативное решение

В Shortcuts есть встроенная команда для извлечения телефонных номеров. Просто используйте команду «Получить номера телефонов от _______» в ярлыке. Он распознает все форматы телефонных номеров.

Пример:

Альтернативное решение

Можно вставить скопированный текст из буфера обмена в Text действие, которое удаляет любое дополнительное форматирование.

Другие вопросы по тегам