【问题标题】:phone number validation in check_phone functioncheck_phone 函数中的电话号码验证
【发布时间】:2014-09-07 01:04:37
【问题描述】:

我有一个 signup.php 文件,其中包含一个用于验证用户名和电子邮件的脚本。我在 php 文件中添加了一个电话号码字段,并将其作为 varchar(15) 添加到数据库中。一切正常,但它接受在该字段中输入的任何废话。我应该在下面的脚本中添加什么语法来验证电话号码?

必需的验证 *文本框应允许输入 11 位数字。 *如果用户输入一个 10 位数字,在数据库中它应该将数据库表字段更新为 +91 后跟 10 位数字 *如果用户输入一个以 0 开头的 11 位数字,它应该删除零并将数据库表字段更新为 +91 后跟 10 位数字(删除 0) *不允许使用字母和特殊字符

<script type="text/javascript">
function check_username(){
    var b=$('#username').val();
    if(b.length<3){
        $('#username').css('border','2px solid #a50000')
    }else{
        $.get("system/ajax.php?a=checkUser",{data:b},function(a){
            if(a==1){
                $('#username').css('border','2px solid #00a500')
            }else{
                $('#username').css('border','2px solid #a50000')
            }
        })
    }
}
function check_email(){
    var b=$('#email').val();
    if(b.length<3){
        $('#email').css('border','2px solid #a50000')
    }else{
        $.get("system/ajax.php?a=checkEmail",{data:b},function(a){
            if(a==1){$('#email').css('border','2px solid #00a500')
            }else{
                $('#email').css('border','2px solid #a50000')
            }
        })
    }
}
function check_email2(){
    var a=new RegExp(/^(("[\w-+\s]+")|([\w-+]+(?:\.[\w-+]+)*)|("[\w-+\s]+")([\w-+]+(?:\.[\w-+]+)*))(@((?:[\w-+]+\.)*\w[\w-+]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][\d]\.|1[\d]{2}\.|[\d]{1,2}\.))((25[0-5]|2[0-4][\d]|1[\d]{2}|[\d]{1,2})\.){2}(25[0-5]|2[0-4][\d]|1[\d]{2}|[\d]{1,2})\]?$)/i);
    var b=$('#email').val();
    var c=$('#email2').val();
    if(!a.test(c)){
        $('#email2').css('border','2px solid #a50000')
    }else if(b==c){
        $('#email2').css('border','2px solid #00a500')
    }else{
        $('#email2').css('border','2px solid #a50000')
    }
} 
</script>

谢谢

【问题讨论】:

  • 请发布您目前尝试过的内容。
  • 我搜索了一下,发现我必须把它放在某个地方 [0-9][0-9][0-9][0-9][0-9][0-9 ][0-9][0-9][0-9][0-9] 并以 +91 作为前缀。我还了解到,如果满足验证,边框颜色将变为绿色,如果不满足,则变为红色并写入 $db->Query("INSERT INTO users(email,phone,login,country,sex) values('" .$email."','".$phn."','".$name."','".$country."','".$gender."')");将其插入数据库。在编写验证以及如何在 insert into 语句中添加前缀 +91 方面需要帮助
  • 不要重新发明轮子。使用 Google 的 libphonenumber:github.com/giggsey/libphonenumber-for-php

标签: php mysql database validation phpmyadmin


【解决方案1】:

首先,您的主要验证应该在 PHP 中完成,而不是在 JavaScript 中。即使您修复了 JavaScript 代码,任何前来的访问者也可以禁用 JavaScript 并在字段中输入他们想要的任何内容。

要在 PHP 中验证电话号码,请尝试以下操作:

<?php
function validatePhoneNumber($num) {
    if (!ctype_digit($num)) {
        return false;
    }
    $len = strlen($num);
    if ($len === 11) {
        if ($num[0] === "0") {
            return "+91" . substr($num, 1);
        } else {
            return $num;
        }
    } else if ($len === 10) {
        return "+91" . $num;
    } else {
        return false;
    }
}
?>

如果电话号码无效,函数validatePhoneNumber 将返回false。否则,它会将解析后的电话号码作为字符串返回。

像这样使用它:

<?php
validatePhoneNumber("4455");        // false
validatePhoneNumber("(55)5555555"); // false
validatePhoneNumber("5518843371");  // "+915518843371"
validatePhoneNumber("04113313311"); // "+914113313311"
validatePhoneNumber("14355555555"); // "143555555555"
?>

【讨论】:

  • 谢谢....我已经有一条线了.... $phn = $db->EscapeString($_POST['phone1']);在 signup.php 文件中。我可以将此行更改为 $phn = $db->EscapeString($_POST[validatePhoneNumber('phone1')]); ?我已将该函数粘贴在 signup.php 文件的底部。这样可以吗?
  • 实际上,验证应该在 JavaScript 和 PHP 中完成。在 JS 中进行验证为非恶意用户(几乎是每个人)提供了快速反馈,让输入框按照问题中的描述进行着色,并让服务器检查标准化数字。服务器上的验证是必要的,因为正如您所指出的,客户端验证是不可信的。
  • @user3736026 这将在字符串"phone1" 上调用validatePhoneNumber 函数。您需要使用提供的实际号码呼叫它,因此您应该使用:$phn = validatePhoneNumber($_POST['phone1'])。使用if ($phn === false)查看电话号码是否无效。如果它不是 false,那么它是一个有效数字,然后您可以使用 $phn = $db-&gt;EscapeString($phn) 并将其传递给查询。
  • @BobBrown 这是真的;我的意思是说 primary 验证应该在服务器端完成(编辑答案)。谢谢!
  • 对不起,我对编程知之甚少......我在这里有点困惑。那么在 javascript 本身中输入此验证是否更好?整个函数可以粘贴在脚本标签中吗?以及如何在提供的功能中完成着色?我非常感谢你们的贡献,并感谢你们的帮助。
猜你喜欢
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多