Мова: Українська
Регулярні вирази — це потужні інструменти для опису шаблонів у тексті, зокрема телефонних номерів. Ви можете використовувати цю функцію для перевірки правильності формату зібраного номера телефону.
У цьому посібнику ми крок за кроком розглянемо, як створити регулярний вираз для перевірки зібраних телефонних номерів.
Розуміння домену
Перш ніж писати регулярний вираз, важливо зрозуміти очікуваний формат тексту. У цьому прикладі ми розглянемо перевірку номерів мобільних телефонів з Демократичної Республіки Конго (ДРК).
У ДРК схема нумерації для мобільних телефонів є наступною:
- Vodacom: 81X XXX XXX або 82X XXX XXX
- Supercell: 80X XXX XXX
- Congo-Chine Telecom: 84X XXX XXX
- Celltell: 97X XXX XXX, 98X XXX XXX. або 99X XXX XXX
Де "X" — це будь-яка цифра від 0 до 9.
Ми можемо використовувати наведені вище шаблони, щоб написати правило валідації, яке перевіряє дійсний номер мобільного телефону.
Простий регулярний вираз
Почнемо зі збігу з номерами Vodacom. Кожен мобільний номер Vodacom починається з "81" або "82" та ще однієї цифри, а потім дві групи по три цифри:
REGEXMATCH(PHONE_NUMBER, "8[12][0-9] [0-9][0-9][0-9] [0-9][0-9][0-9]")
Тут ми використовуємо нотацію класу символів, щоб вказати діапазон символів:
[12]відповідає "1" або "2"[0-9]відповідає будь-якому символу між "0" та "9"
Ми можемо скоротити цей вираз, використовуючи класи символів, що повторюються:
REGEXMATCH(PHONE_NUMBER, "8[12][0-9] [0-9]{3} [0-9]{3}")
{3} вказує, що попередній символ повинен збігатися рівно три рази.
Зіставлення будь-якого мобільного оператора
Основна відмінність між різними операторами полягає в першій групі цифр:
| Оператор | Шаблон першої групи |
|---|---|
| Vodacom | 8[12][0-9] |
| Supercell | 80[0-9] |
| Congo-Chine | 84[0-9] |
| Celltell | 9[789][0-9] |
Ми можемо зіставити будь-якого з вищезазначених операторів, згрупувавши їх за допомогою дужок і використовуючи оператор "pipe" (|) для визначення альтернатив:
REGEXMATCH(PHONE_NUMBER, "((8[12][0-9])|(80[0-9])|(84[0-9])|(9[789][0-9])) [0-9]{3} [0-9]{3}")
Насправді, єдина відмінність між першими трьома операторами — це друга цифра, тому ми можемо ще більше спростити:
REGEXMATCH(PHONE_NUMBER, "((8[0124][0-9])|(9[789][0-9])) [0-9]{3} [0-9]{3}")
Однак, це буде відповідати номеру телефону, де б він не з'являвся в тексті. Отже, "801 343 933" збігатиметься, але так само збігатиметься і "TEL: 801 343 933". Ми б хотіли, щоб у текстове поле вводився лише номер телефону, тому ми можемо використовувати символ ^, щоб вимагати збігу на початку поля, і $ — щоб вимагати збігу в кінці:
REGEXMATCH(PHONE_NUMBER, "^((8[0124][0-9])|(9[789][0-9])) [0-9]{3} [0-9]{3}$")
Обчислення назви мобільного оператора
Ми також можемо використовувати регулярний вираз для обчислення назви мобільного оператора з номера телефону, використовуючи функцію IF разом з функцією REGEXMATCH:
IF(REGEXMATCH(PHONE_NUMBER, "^8[12][0-9]"), "Vodacom",
IF(REGEXMATCH(PHONE_NUMBER, "^80[0-9]"), "Supercell",
IF(REGEXMATCH(PHONE_NUMBER, "^84[0-9]"), "Congo-Chine",
IF(REGEXMATCH(PHONE_NUMBER, "^9[789][0-9]"), "Celltell", "Other"))))
Створення форми
Тепер, коли у нас є дві формули, ми можемо додати форму збору даних в ActivityInfo.
Додати форму
- Перейдіть до вашої бази даних.
- Натисніть "Додати форму"
- Введіть назву форми "Registration"
Додайте поле для номера телефону
- Додайте текстове поле з назвою "Phone Number" та кодом
PHONE_NUMBER. - Поставте прапорець "Встановіть правила перевірки"
- Вставте наведену вище формулу валідації у вікно правил валідації або відкрийте редактор формул
Додайте поле мобільного оператора
- Додайте обчислюване поле під назвою "Mobile Provider"
- У редакторі формул вставте вищенаведений оператор IF.
Тестування форми
Коли ви відкриваєте форму для введення даних, введення номера телефону, який не відповідає формату ДРК, має призвести до помилки валідації:
Коли введені дані збігаються, поле проходить перевірку, а обчислюване поле показує правильного мобільного оператора:
Ви можете спробувати форму самостійно.