【问题标题】:PHP preg_match for validating 10 digit mobile numberPHP preg_match 用于验证 10 位手机号码
【发布时间】:2017-11-12 09:47:26
【问题描述】:

我正在尝试使用 PHP 函数 preg_match 验证 10 位数的手机号码。下面的代码不会产生任何输出。

是正则表达式错误吗?或者我用错了。

我在输出中期待Hi True。如果匹配,则Hi False,如果不匹配。

<?php
$value = '9987199871';
$mobileregex = "/^[1-9][0-9]{10}$/" ;  
echo "Hi " . preg_match($mobileregex, $value) === 1; // @debug
?>

正则表达式取自https://stackoverflow.com/a/7649835/4050261

【问题讨论】:

    标签: php regex preg-match


    【解决方案1】:

    您所说的正则表达式将匹配 11 位数字,而不是 10 位。由于所有印度手机号码都以 9、8、7 或 6 开头,我们可以使用以下正则表达式:

    ^[6-9][0-9]{9}$
    

    这是你的代码 sn-p 更新:

    $value = '9987199871';
    $mobileregex = "/^[6-9][0-9]{9}$/" ;  
    echo "Hi " . preg_match($mobileregex, $value) === 1;
    

    请注意,就验证而言,上述正则表达式可能仍远未达到我们所能做到的最好水平,但这至少是一个开始。

    【讨论】:

    • 我正在验证印度手机号码。
    • 感谢您的指出。正则表达式在这个答案中建议。 - stackoverflow.com/a/3813226/4050261
    • 除了 according to this Wikipedia page 似乎是错误的,它指出印度手机号码也可以以 6 开头。
    • 6 用于寻呼机。感谢您指出这一点。将使用您的方法。
    • @AdarshMadrecha 如果您有后续问题,请随时联系我 :-)
    【解决方案2】:

    以下代码 sn-p 将检查手机号码位数是否在 10-15 位以内,包括开头的“+”,后跟非零的第一个数字。

    正则表达式

    "/^[+]?[1-9][0-9]{9,14}$/"
    

    代码sn-p

    // Validation for the mobile field.
    function validateMobileNumber($mobile) {
      if (!empty($mobile)) {
        $isMobileNmberValid = TRUE;
        $mobileDigitsLength = strlen($mobile);
        if ($mobileDigitsLength < 10 || $mobileDigitsLength > 15) {
          $isMobileNmberValid = FALSE;
        } else {
          if (!preg_match("/^[+]?[1-9][0-9]{9,14}$/", $mobile)) {
            $isMobileNmberValid = FALSE;
          }
        }
        return $isMobileNmberValid;
      } else {
        return false;
      }
    }
    

    ^ 正则表达式的符号表示开始
    [+]? 确保在开始时允许单个(或零)+ 符号
    [1-9] 确保第一个数字是非零数字
    [0-9]{9,14} 将确保有是 9 到 14 位数字
    $ 表示结束

    【讨论】:

      【解决方案3】:
      $mob = "9513574562";
      if(preg_match("/^\d+\.?\d*$/",$mob) && strlen($mob)==10){
      
      echo 1;
      
      }else{
      
       echo 0;
      
      }
      

      preg_match() 检查它是否为整数,并且在 strlen() 中检查此字符串中的数字。如果满足 2 个条件则为 10 位有效手机号

      【讨论】:

      • preg_match() 检查它是否为整数,并且在 strlen() 中检查此字符串中的数字。如果满足2个条件则为10位有效手机号。
      • 谢谢@Milan Krushna,但我的意思是编辑你的答案
      • 我的意思是你应该编辑你的答案添加解释,以便其他用户阅读并投票。也许问题得到验证,你会得到积分
      • 我应该为这个答案添加什么解释?
      【解决方案4】:

      对于巴基斯坦手机号码,正则表达式代码如下

      ^[9][2][3][0-9]{9}$
      

      【讨论】:

      • 为什么在字符类中放个位数?这没有意义。
      • 因为我们需要 923 个固定数字在前面 3 位
      • 前 3 位数字必须是 923
      • 所以,^923[0-9]{9}$ 匹配相同的东西并且更具可读性。但这并不能回答问题。
      猜你喜欢
      • 2013-03-01
      • 2016-08-30
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 2013-04-14
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多