【问题标题】:codeigniter form validation with phone numbers带有电话号码的codeigniter表单验证
【发布时间】:2009-12-20 22:48:22
【问题描述】:

验证在 codeigniter 中输入的电话号码的好方法是什么?

这是我第一次编写应用程序,我根本不懂正则表达式。

为电话号码设置三个输入字段是否更容易?

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

    这是我在网上找到的一个很酷的正则表达式。它验证几乎任何美国格式的数字并将其转换为 (xxx) xxx-xxxx。我认为这很棒,因为人们可以使用他们习惯使用的任何格式输入任何 10 位数的美国电话号码,并且您可以从中获得正确格式的号码。

    这是您可以放入 MY_form_validation 类的整个函数。我希望我的表单允许空字段,所以如果你想强制一个值,你必须改变它。

    function valid_phone_number_or_empty($value)
    {
        $value = trim($value);
        if ($value == '') {
            return TRUE;
        }
        else
        {
            if (preg_match('/^\(?[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$/', $value))
            {
                return preg_replace('/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/', '($1) $2-$3', $value);
            }
            else
            {
                return FALSE;
            }
        }
    }
    

    【讨论】:

    • 在您的库文件夹中创建一个名为 MY_form_validation 的文件。确保您在控制器中调用 $this->load->library('form_validation') 。然后在处理提交的函数中,执行 $this->form_validation->set_rules('phone_1', 'Phone 1', 'valid_phone_number_or_empty');其中 phone_1 是您的表单字段。
    • 您应该从 Dan Beam 获取第一行代码(但将 $_POST 替换为 $value),而不是使用 trim,然后按照您想要的方式对其进行格式化。
    【解决方案2】:

    最好的方法是根本不验证电话号码,除非您绝对 100% 肯定您只处理美国或至少北美的电话号码。一旦您允许来自欧洲的电话号码,我认为没有涵盖所有可能性的正则表达式。

    【讨论】:

    • 是的。这与电子邮件地址基本相同,您可以在此处看到:regular-expressions.info/email.html
    • 所有电话号码的共同点是什么?没错,数字!看我下面的帖子
    【解决方案3】:

    用这个去掉非数字:

    $justNumbers = preg_replace( '/\D/', $_POST[ 'phone_num' ] );
    

    看看字数够不够!

    $numRequired = 7; // make your constraints here
    if( strlen( $justNumbers ) < $numRequired ){ /* ... naughty naughty ... */ }
    

    当然,这很松散,但也适用于国际号码(因为它真正做的是查看输入中是否有超过 7 个号码)。

    只需根据您的要求更改所需位数。

    【讨论】:

    • 关于这个的问题是,有很多地方使用 10 位数的电话号码,有些仍然使用 7。这也不会影响使用括号作为区号或连字符/空格分隔电话号码的前后修复。
    【解决方案4】:

    Dan 解释的正则表达式解决方案将是解决问题的方法 - 但您可能需要重新考虑验证电话号码。如果用户想像他/她在纸上那样添加注释怎么办? - 我看到在电话号码字段中输入了许多值,例如:

    307-555-2323(家)

    下午 6 点后拨打 307-555-3232

    我认为今天我们可以假设用户知道要输入什么。

    【讨论】:

    • 总是有充分的理由通过验证来限制数据输入。字段不用于注释,它们用于特定信息。
    猜你喜欢
    • 1970-01-01
    • 2012-06-06
    • 2012-03-04
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2016-05-01
    • 2021-04-03
    相关资源
    最近更新 更多