1

Тема: Валідація телефонного номеру

Мені необхідно створити аналог телефонної книги. І я вирішла зробити перевірку на коректність введення номеру ось так:

bool validInputPhoneNumber(const char *records)
{
    int i = 0;
   while (records != '\0' && isdigit(records[i]))
        ++i;
    cout << i << endl;
    if (i <= strlen(records))
        return true;
    else
        return false;

}

Але так перевіряє чи в номері лише числа, а в номері може бути - чи () з кодом.
Підкажіть, як правильно зробити більш-менш нормальну валідацію номеру.

2

Re: Валідація телефонного номеру

Оце - точно завдання для регулярних виразів.
http://www.cplusplus.com/reference/regex/

Подякували: Yola, pika1989, leofun013

3

Re: Валідація телефонного номеру

Не всі країни мають однакову регулярну мову, тобто набір дозволених номерів. Отже, ви маєте визначитись для якої країни ви пишете програму. Дістати специфікацію телефонних номерів цієї країни і написати регулярний вираз який визначатиме цю регулярну мову. Лише у випадку дуже простої мови, як-от "номер складається з непорожнього рядка з самих цифр" ви можете власноруч написати функцію перевірки, інаше покладіться на вже написані рушії для регулярних виразів.

ukrainian.stackexchange.com - це питання-відповіді з української мови
Подякували: pika19891

4

Re: Валідація телефонного номеру

Я вам дякую, але ми їх ще не вивчали, тому зробила ось так:

bool validInputPhoneNumber(const char *records)
{
    int i = 0;
    while (i < strlen(records))
    {
        if (!(isdigit(records[i]) || records[i] == '-'))
            return false;
        ++i;
    }
    return true;
}

5

Re: Валідація телефонного номеру

Маленький вступ до регулярних виразів:

#include <iostream>
#include <regex>

int main()
{
    std::string phones[] = { "123123", "123-123", "(067)-123-123", "123--123", "clearly not a phone number" };
    std::regex txt_regex("^([0-9][- ]?){5}[0-9]$");

    for (const auto &phone : phones) {
        std::cout << phone << ": " << std::regex_match(phone, txt_regex) << '\n';
    }

    return 0;
}

Але ось що я подумав, ви можете прочитати рядок, видалити звідти пробіли, перевірити чи відповідають одна одній дужки, тобто чи немає там такого ")((123123)", видалити дужки, потім перевірити чи цифри розділені лише один символом '-', тобто чи немає там "123--123" і тоді видалити всі ці символи. Останній крок - перевірити що там лишились самі цифри і і їх достатньо.

ukrainian.stackexchange.com - це питання-відповіді з української мови
Подякували: pika19891

6

Re: Валідація телефонного номеру

Дякую, подумаю над цим