За последние 24 часа нас посетили 18311 программистов и 1650 роботов. Сейчас ищут 1082 программиста ...

Валидация номера телефона средствами Java

Тема в разделе "Вопросы от блондинок", создана пользователем dontdonkmedonks, 5 дек 2022.

Метки:
  1. dontdonkmedonks

    dontdonkmedonks Активный пользователь

    С нами с:
    10 фев 2016
    Сообщения:
    19
    Симпатии:
    2
    Всем привет, в интернетах нашел форму заказа звонка с уведомлением в телегу, все работает кроме корректной валидации при вводе номера телефона, подскажите что подправить в коде java script, чтобы при вводе в поле input номер приводился к маске +375 (29) 999 99 99, а +375 ставилось автоматом при нажатии на input. Пока при вводе такая маска получается 375 299 999 999
    Что в этом коде подправить:
    Код (Javascript):
    1. document.getElementById("callme").addEventListener("mouseover", hovertxt);
    2. document.getElementById("callme").addEventListener("mouseout", hovertxt);
    3. document.getElementById("callme").addEventListener("click", window_call);
    4. document.getElementById("window_close").addEventListener("click", window_call);
    5. function hovertxt(){var x = document.getElementById("telhover");if (x.className === "telButton_hover") {x.className += " open";} else {x.className = "telButton_hover";}}
    6. function window_call(){
    7. var x = document.getElementById("window-callme");if (x.className === "window_wrap") {x.className += " open";} else {x.className = "window_wrap";}
    8. var x = document.getElementById("callme");if (x.className === "telButton anim") {x.className += " hide";} else {x.className = "telButton anim";}}
    9. var cc = backPhone.telForm,
    10.     events  = ['input', 'change', 'blur', 'keyup'];
    11. for (var i in events) {
    12.     cc.addEventListener(events[i], formatCardCode, false);}
    13. function formatCardCode() {
    14.     var cardCode = this.value.replace(/[^\d]/g, '').substring(0,12);
    15.     cardCode = cardCode !== '' ? cardCode.match(/.{1,3}/g).join(' ') : '';
    16.     this.value = cardCode;
    17. }
    18. window.addEventListener("load", function () {
    19.   function sendData() {
    20.     if (window.XMLHttpRequest) {
    21.         XHR = new XMLHttpRequest();
    22.     } else if (window.ActiveXObject) {
    23.         XHR = new ActiveXObject("Microsoft.XMLHTTP");
    24.     }
    25.     var FD = new FormData(form);
    26.     XHR.addEventListener("load", function(event) {
    27.       return_response_ok(event.target.responseText);
    28.     });
    29.     XHR.addEventListener("error", function(event) {
    30.       return_response_err('Произошла ошибка. Попробуйте позже');
    31.     });
    32.     XHR.open("POST", location.protocol + "//" + location.host + "/callback.php");
    33.     XHR.send(FD);
    34.   }
    35.   function return_response_ok(e){
    36.     e=JSON.parse(e);
    37.     if(e.status == 'success'){
    38.      document.getElementById("notify").innerHTML = e.message;
    39.      document.getElementById("frmm").className += " hide";
    40.      setTimeout(window_call, 3000);
    41.      }else if(e.status == 'error'){
    42.         document.getElementById("notify").innerHTML = e.message;
    43.     }
    44. }
    45. function return_response_err(e){
    46.      document.getElementById("notify").innerHTML = e;
    47. }
    48.   var form = document.getElementById("backPhone");
    49.   form.addEventListener("submit", function (event) {
    50.     event.preventDefault();
    51.     sendData();
    52.   });
    53. });
    Обработчик callback.php:
    PHP:
    1.     define('TELEGRAM_TOKEN', '*************');  
    2.  
    3.     define('TELEGRAM_CHATID', '*******');
    4.  
    5.     function message_to_telegram($text) {
    6.         $ch = curl_init();
    7.         curl_setopt_array(
    8.             $ch,
    9.             array(
    10.                 CURLOPT_URL => 'https://api.telegram.org/bot' . TELEGRAM_TOKEN . '/sendMessage',
    11.                 CURLOPT_POST => TRUE,
    12.                 CURLOPT_RETURNTRANSFER => TRUE,
    13.                 CURLOPT_TIMEOUT => 10,
    14.                 CURLOPT_POSTFIELDS => array(
    15.                     'chat_id' => TELEGRAM_CHATID,
    16.                     'text' => $text,
    17.                     'parse_mode' => 'html',
    18.                 ),
    19.             )
    20.         );
    21.         curl_exec($ch);
    22.     }
    23.  
    24. if(isset($_POST['phone'])){
    25.     $phone            =    str_replace(" ","",$_POST['phone']);
    26.     $httpReferer    =    isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;
    27.     if (strlen($phone) >=11){
    28.         if (substr( $phone, 0, 1 )=== "8" || substr( $phone, 0, 3 )=== "375" )    {
    29.             $message = "<i>Перезвоните мне:</i>\n\n<b>$phone</b>\n\nКлиент оставил завку на сайте:\n$httpReferer";
    30.             message_to_telegram($message);
    31.                     $response['status'] = 'success';
    32.              $response['message'] = "Спасибо за Ваше обращение.<br> В течение нескольких минут с Вами свяжется наш менеджер.";
    33.         }else{
    34.             $response['status'] = 'error';
    35.              $response['message'] = "<span style='color:yellow'>Возможно, Вы не верно ввели номер телефона.<br> Номера телефонов Беларуси должны начинаться с кодом 8 или 375<br>Проверьте и повторите попытку<br>Пример: 8 (029) 999 99 99 либо +375 (29) 999 99 99</span>";
    36.         }
    37.     }else{
    38.             $response['status'] = 'error';
    39.              $response['message'] = "<span style='color:yellow'>Возможно, Вы не верно ввели номер телефона.<br>Проверьте и повторите попытку.<br>*Подсказка:Номер должен содержать в себе не менее 11 знаков(с кодом области, города или оператора).<br>Пример: 8 029 999 99 99</span>";
    40.     }
    41.             header('Content-type: application/json');
    42.         echo json_encode($response);}
    Сама форма ввода номера:
    HTML:
    1.  <form id="backPhone" name="backPhone" method="post">
    2. <input name="phone" type="tel" id="telForm" maxlength="20" placeholder="Введите ваш телефон" required="required" autocomplete="off">
    3. <button id="telButton" type="submit" form="backPhone">Заказать звонок</button>
    4. </form>