Не разрешайте бесплатные номера в php preg_match regexp - PullRequest
0 голосов
/ 14 января 2019

Привет, я работаю над проектом технического обслуживания. Но в этот код кто-то добавил выражение preg_match для запрета бесплатных номеров. Бесплатные номера начинаются с кодов 800, 888, 877, 866, 855 или 844. Они будут отформатированы как 800-xxx-xxxx или 1- 800-xxx-xxxx или (800) xxx-xxxx или 800xxxxxxx или 1800xxxxxxx. и т.д.

Если номер бесплатный, введите ошибку: «Пожалуйста, введите здесь местный телефонный номер, а не бесплатный». Ниже мой код: -

$getphone = $_POST['phone'];
    /* ISSUE: This catches 
            1-800-450-7006 
            1 (800) 450-7006 
            1(800) 450-7006 
        but is not catching
            (800) 450-7006
            */
    if(!preg_match('/^(?!(?:1-)?(\\$|#|8(00|55|66|77|88)))\(?[\\s.-]*([0-9]{3})?[\\s.-]*\)?[\\s.-]*[0-9]{3}[\\s.-]*[0-9]{4}$/', $getphone)){
        // Need to redirect back, not to profile
       echo 'Please enter a local phone number here, not a toll free number'; die;
    }

Может кто-нибудь помочь мне, как проверить этот случай (800) 450-7006. Спасибо

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Я предлагаю "исключить" определенные цифры в скобках (или нет) в начале:

'~^(?!(?:1-)?(?:\$|#|(?:\((8(?:00|55|66|77|88))\)|(?1))))\(?[\s.-]*([0-9]{3})?[\s.-]*\)?[\s.-]*[0-9]{3}[\s.-]*[0-9]{4}$~'

См. Демоверсию regex

Я заменил 8(00|55|66|77|88) на (?:\((8(?:00|55|66|77|88))\)|(?1)), группа без захвата, соответствующая двум альтернативам:

  • \((8(?:00|55|66|77|88))\) - (, 800, 855, 866, 877, 888, а затем )
  • | - или
  • (?1) - всего 8(?:00|55|66|77|88), группа 1, выкройка.
0 голосов
/ 14 января 2019
<?php

 /* 800, 888, 877, 866, 855 or 844. They will be formatted as
    800-xxx-xxxx or 1-800-xxx-xxxx or (800) xxx-xxxx or
    800xxxxxxx or 1800xxxxxxx */

 $phone = $_POST['phone']; 

 // remove everything that is not a number
 $phone = preg_replace('/[^\d]/', '', $phone);

 // look for your pattern in the "cleaned" string
 if(!preg_match('/^1?8(88|77|66|55|44|00)/', $phone)){
  echo 'error';
 }

?>
...