Zoylander
@Zoylander

Как выполнить проверку введеного номера для нескольких стран при оформлении заказа?

Пытаюсь написать код, который позволит магазину, работающему для России и Беларуси проверять номер телефона на код оператора и количество чисел номера в зависимости от выбранной страны доставки. Пока не работает. Может кто подскажет что не так...
add_action('woocommerce_checkout_process', 'number_mask');
function number_mask() {
global $woocommerce;
if ( isset ($woocommerce->customer->get_country() <> 'BY' )) {
    isset($_POST['billing_phone']) && ! preg_match("/^(\+375)?[0-9 \-]{9,}/i", $_POST['billing_phone'])
        wc_add_notice(__('Пожалуйста введите <strong>Номер телефона</strong> с кодом оператора.'), 'error');
}
if ( isset ($woocommerce->customer->get_country() <> 'RU' )) {
    isset($_POST['billing_phone']) && ! preg_match("/^(\+7)?[0-9 \-]{10,}/i", $_POST['billing_phone'])
        wc_add_notice(__('Пожалуйста введите <strong>Номер телефона</strong> с кодом оператора.'), 'error');

}}
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
Zoylander
@Zoylander Автор вопроса
По итогу решил использовать такое решение:
add_action('woocommerce_checkout_process', 'custom_checkout_field_process');
function custom_checkout_field_process() {
    // Check the number phone
    if ( isset($_POST['billing_phone']) && ! preg_match("/^(7|\+7|8|375|\+375|8)?[0-9]{9,10}/", $_POST['billing_phone']) )
        wc_add_notice(__('Пожалуйста введите <strong>Номер телефона</strong> с кодом оператора.'), 'error');
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@loonny
Я не эксперт в WooCommerce, но что это за знак <>в коде?
Могу предположить что там должно было быть ==

add_action('woocommerce_checkout_process', 'number_mask');
function number_mask() {
global $woocommerce;
if ( isset ($woocommerce->customer->get_country() == 'BY' )) {
    isset($_POST['billing_phone']) && ! preg_match("/^(\+375)?[0-9 \-]{9,}/i", $_POST['billing_phone'])
        wc_add_notice(__('Пожалуйста введите <strong>Номер телефона</strong> с кодом оператора.'), 'error');
}
if ( isset ($woocommerce->customer->get_country() == 'RU' )) {
    isset($_POST['billing_phone']) && ! preg_match("/^(\+7)?[0-9 \-]{10,}/i", $_POST['billing_phone'])
        wc_add_notice(__('Пожалуйста введите <strong>Номер телефона</strong> с кодом оператора.'), 'error');

}}


Кстати некоторые вводят номера без плюса, а некоторые через восьмерку вообще и это все верные номера. По этому думаю это регулярное выражение подойдет для российских номеров лучше
/^(7|\+7|8)?[0-9]{10}/
Смысла ставить флаг i нету, так как все цифры одного регистра и так. А пробелы и - можно убрать из строки перед проверкой

PHP: Операторы сравнения
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы