如何验证CakePhp中的用户电话号码

时间:2012-01-17 05:32:48

标签: cakephp

我在CakePHP中创建了一个用户注册表单。 我的意图是,如果用户提供电话号码,那么它应该是数字和唯一的。 所以我定义了以下规则:

 'phone_no_should_be_numeric'=>array(
                                      'rule' => 'numeric',
                   'message'=>'Phone number should be numeric'
                                ),
'Phone_no_should_be_unique'=>array(
                              'rule' => 'isUnique',
                  'message'=>'Phone number already exist'
            ),

但由于这条规则,它迫使用户输入电话号码。我不想要的。 我的意图是,如果用户提供电话号码,那么它应该是唯一的和数字的。 任何人都可以建议我解决这个问题的最佳方法是什么。

Thnx提前, 乔

4 个答案:

答案 0 :(得分:3)

'allowEmpty'=>真

'phone_no_should_be_numeric'=>array(
'rule' => 'numeric',
'allowEmpty' => true, //validate only if not empty
'message'=>'Phone number should be numeric')

请参阅:Validation

答案 1 :(得分:2)

设置'allowEmpty'=>true将阻止他们输入数据。

另一个很好的选择是内置“phone validation”(如果您的用户是美国居民)。这允许他们以多种方式输入电话号码,包括(xxx)xxx-xxxx等等。

如果您的用户不是美国居民(或不同国籍的混合),那么比“数字”更好的解决方案是提供正则表达式来检查电话号码(details here):

电话号码的正则表达式示例为here(以及许多其他常见的正则表达式示例)。

总的来说,您的用户会感谢您允许他们以任何他们想要的方式输入他们的电话号码,而不仅仅是大量的电话号码。

答案 2 :(得分:1)

美国电话的自定义模型验证

允许美国格式: 123-123-1234,(123)123 1234,123.132.1234,1234567891

输入字段名称为“ phone_num

'phone_num' => array(
        'rule' => array('isValidUSPhoneFormat')
    ),


 /*isValidUSPhoneFormat() - Custom method to validate US Phone Number
 * @params Int $phone
 */
 function isValidUSPhoneFormat($phone){
 $phone_no=$phone['phone_num'];
 $errors = array();
    if(empty($phone_no)) {
        $errors [] = "Please enter Phone Number";
    }
    else if (!preg_match('/^[(]{0,1}[0-9]{3}[)]{0,1}[-\s.]{0,1}[0-9]{3}[-\s.]{0,1}[0-9]{4}$/', $phone_no)) {
        $errors [] = "Please enter valid Phone Number";
    } 

    if (!empty($errors))
    return implode("\n", $errors);

    return true;
}

答案 3 :(得分:0)

FOR +71234567891

           'phone' => array(
                'rule' => array('phone', '/\+7\d{10}/', 'all'),
                'message' => '+79001234567'
            ),