以php形式验证手机号码

Posted

技术标签:

【中文标题】以php形式验证手机号码【英文标题】:Validate Mobile number in php form 【发布时间】:2012-07-31 22:51:44 【问题描述】:

我想验证10位数的手机号码,并在我进入数据库时​​添加前缀0。

<?php

include ('database_connection.php');

$citystate = $_POST['citystate'];
$serviceprovider = $_POST['serviceprovider'];
$accept = $_POST['accept'];
if (isset($_POST['formsubmitted'])) 
    $error = array(); //Declare An Array to store any error message 

    if (isset($_POST['checkbox'])) 
        $mumbai = (in_array("mumbai", $_POST['checkbox']) ? 1 : 0);
        $pune = (in_array("pune", $_POST['checkbox']) ? 1 : 0);
        $banglore = (in_array("banglore", $_POST['checkbox']) ? 1 : 0);
        $mysore = (in_array("mysore", $_POST['checkbox']) ? 1 : 0);
    

    if ($mumbai + $pune + $banglore + $mysore == 0) 
        $error[] = 'Please check atleast one SMS center';
    

    if ($accept != 1) 
        $error[] = 'Please check terms ';
    

    if (empty($_POST['mobileno'])) //if no name has been supplied 
        $error[] = 'Please Enter a Mobile Number '; //add to array "error"
    
    if (empty($_POST['mobileno'])) //if no name has been supplied 
        $error[] = 'Please Enter a Mobile Number '; //add to array "error"
     else 

        $mobile = $_POST['mobileno']; //else assign it a variable

        /* if( preg_match("^[0-9]10", $mobile) )

          

          else 

          $error[] = 'Your Mobile No is invalid  ';
           */
    
    if (empty($_POST['fname'])) //if no name has been supplied 
        $error[] = 'Please Enter a First name '; //add to array "error"
     else 
        $fname = $_POST['fname']; //else assign it a variable
    

    if (empty($_POST['lname'])) //if no name has been supplied 
        $error[] = 'Please Enter a Last name '; //add to array "error"
     else 
        $lname = $_POST['lname']; //else assign it a variable
    
    if (empty($_POST['email'])) 
        $error[] = 'Please Enter your Email ';
     else 
        if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['email'])) 
            //regular expression for email validation
            $email = $_POST['email'];
         else 
            $error[] = 'Your EMail Address is invalid  ';
        
    


    if (empty($_POST['passwd1'])) 
        $error[] = 'Please Enter Your Password ';
     else 
        $password = $_POST['passwd1'];
    
    if (empty($_POST['passwd2'])) 
        $error[] = 'Please Verify Your Password ';
     else 
        $password = $_POST['passwd2'];
    
    if ($_POST["passwd1"] != $_POST["passwd2"]) 
        $error[] = 'Password does not match';
    

    if (empty($error))  //send to Database if there's no error ' //If everything's OK...
        // Make sure the mobile no is available:
        $query_verify_mobileno = "SELECT * FROM userdtls WHERE mobileno = '$mobile'";
        $result_verify_mobileno = mysqli_query($dbc, $query_verify_mobileno);
        if (!$result_verify_mobileno) //if the Query Failed ,similar to if($result_verify_mobileno==false)
            echo ' Database Error Occured ';
        

        if (mysqli_num_rows($result_verify_mobileno) == 0)  // IF no previous user is using this number .
            // Create a unique  activation code:
            //$activation = md5(uniqid(rand(), true));
            $query_insert_user = "INSERT INTO userdtls ( mobileno, serviceprovider, pass,  fname, lname, email, citystate, MUM, PUN, BNG, MYS ) VALUES ( '" . $mobile . "', '" . $serviceprovider . "', '" . $password . "', '" . $fname . "', '" . $lname . "', '" . $email . "', '" . $citystate . "','" . $mumbai . "', '" . $pune . "', '" . $banglore . "', '" . $mysore . "'  )";
        
    

现在我卡在手机号码验证中。我尝试使用正则表达式。

我想要做的是添加一个 10 位数的电话号码,并确保它只是数字,否则会出错,在将号码输入数据库时​​,我想在手机号码 0 上添加一个前缀,所以它应该像0和10位数字

【问题讨论】:

'请帮助' - SO 政策是否允许这种语言? 【参考方案1】:

试试这样的:

$phoneNumber = $_POST['mobileno'];

if(!empty($phoneNumber)) // phone number is not empty

    if(preg_match('/^\d10$/',$phoneNumber)) // phone number is valid
    
      $phoneNumber = '0' . $phoneNumber;

      // your other code here
    
    else // phone number is not valid
    
      echo 'Phone number invalid !';
    

else // phone number is empty

  echo 'You must provid a phone number !';

【讨论】:

对吗? if (empty($_POST['mobileno'])) //if no name has been supplied $error[] = 'Please Enter a Mobile Number ';//add to array "error" if(preg_match('/^\d10$/',$mobile)) $mobile = '0' . $mobile; // your other code here else $mobile = $_POST['mobileno'];//else assign it a variable else echo 'Phone number invalid !'; 我根据您的评论编辑了我的帖子(您在评论中的代码很难阅读,因为它没有格式化) 这就是我想做的事情 if (empty($_POST['mobileno'])) //if no name has been supplied $error[] = 'Please Enter a Mobile Number ';//add to array "error" if(preg_match('/^\d10$/',$mobile)) $mobile = '0' . $mobile; $mobile = $_POST['mobileno'];//else assign it a variable // your other code here else echo 'Phone number invalid !'; 有什么方法可以直接与您联系,因为这件事令人困惑,我无法向您发送正确的代码格式。请它非常重要,这就是为什么我要打扰你。请问我需要帮助【参考方案2】:

使用 Google 的 libphonenumber 库可能是最有效且可读性最强的形式。 PHP fork 可用on GitHub。它不仅可以帮助您验证号码本身,还可以用它检查国家代码,甚至可以知道某些号码是否对特定国家/地区有效(此库知道哪些号码前缀对许多国家/地区有效) .例如:07700 900064 是有效的 GB 编号,但 09700 900064 不是,即使它们具有相同长度

以下是我在您的应用中验证手机号码的方法:

$phoneNumber = $_POST['mobileno'];
$countryCode="GB";

if (!empty($phoneNumber))  // phone number is not empty
    $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
    $mobileNumberProto = $phoneUtil->parse($phoneNumber, $countryCode);
    if ($phoneUtil->isValidNumber($mobileNumberProto))  // phone number is valid
        //here you know that number is valid, let's try to format it without country code but with 0 at the beginning (national number format)
        $phoneNumber = $mobileNumberProto->format($mobileNumberProto, PhoneNumberFormat::NATIONAL);
     else 
        $error[] = 'Phone number not valid!';
    
 else 
    $error[] = 'You must provide a phone number!';

$countryCode 是两个字符 ISO 3166-1 代码。您可以在Wikipedia 上查看您所在国家/地区的情况。

【讨论】:

非常感谢您的回答,因为它为我提供了更好的国际解决方案,但我也发布了支持 10 位数字的国家/地区的解决方案。由我为你 +1。【参考方案3】:

对于印度手机号码,这将是最简单的

if(is_numeric($num))
if($num>=1000000000 && $num<=9999999999)
$num="0".$num;

else
echo "Invalid Mobile Number";


else
echo "Hey Buddy mobile numbers are always in digits";

这个想法让我印象深刻,因为愿意找到容易和一些短小的想法,因为数字(1000000000)是最低的数值(10位),而数字(9999999999)是最高的数值,可以用作印度的手机号码。 还有一件事代码将比其他解决方案运行得更快。

【讨论】:

【参考方案4】:

你有没有试过这样的正则表达式:

if( !preg_match("/^([0-1]-)?[0-9]3-[0-9]3-[0-9]4$/i", $phone) ) 
   echo 'Please enter a valid phone number';

【讨论】:

我用过..它给了我错误请输入有效的电话号码,但它仍然被注册并获取数据库中的值【参考方案5】:
if(!ereg("^[7-9]1[0-9]9$", $mob))  return false; 

【讨论】:

为什么要求第一个字符是 7、8 或 9?此外,ereg 已于 7 年前弃用,并已从最新版本的 PHP 中删除。 这仅用于印度手机号码验证 不过,这个问题没有提到印度手机号码。它只是说“10位数字”。【参考方案6】:

改进 pravin tripathi 的答案:

if(!ereg("^[7-9]1[0-9]9$", $mob)) return false;

由于不推荐使用 ereg(),您可以使用

preg_match("/^[7-9]1[0-9]9$/i", $mobile_no)

这将帮助您验证来自印度的手机号码,因为它们是 10 位数字,并且从今天开始以 7、8 或 9 开头。如果引入新数字,您总是可以更改模式。

【讨论】:

以上是关于以php形式验证手机号码的主要内容,如果未能解决你的问题,请参考以下文章

如何用PHP生成验证码

PHP preg_match 用于验证 10 位手机号码

短信验证码的工作原理

php中手机号码验证的正则表达式

php中手机号码验证的正则表达式

思梦PHP-阿里大鱼手机验证码