CakePHP通过Regex验证屏蔽信用卡


CakePHP Validate Masked Credit Card With Regex

我正在为我的用户创建一个更新计费信息部分。我目前正在向表单传递一个屏蔽的信用卡号码。如果用户只想更新他们的账单地址,我不希望他们必须更新他们的信用卡信息。

我正试图使用正则表达式来匹配屏蔽的信用卡,但我无法获得任何正则表达式模式来匹配。。。即使是100%的通配符。。。

以下是我尝试过的几个例子。。。

=============================================

蒙面信用卡价值为XXXXXXXXXX 0012

=============================================

'creditcard' => array(
         'creditcard' => array(
            'rule' => array('cc', 'all', false, '^[.]+$'),
            'message' => 'Required',
            'allowEmpty' => false,
            'required' => true,
            ),
    ),

=============================================

    'creditcard' => array(
        'creditcard' => array(
            'rule' => array('cc', 'all', false, '/^[X]+[0-9](4,)$/'),
            'message' => 'Required',
            'allowEmpty' => false,
            'required' => true,
            ),
    ),

=============================================

    'creditcard' => array(
        'creditcard' => array(
            'rule' => array('cc', 'all', false, '/^[x]+[0-9]+$/i'),
            'message' => 'Required',
            'allowEmpty' => false,
            'required' => true,
            ),
    ),

任何想法都将不胜感激!

谢谢!!

不是一个完整的答案,但在第一个例子中,[]内的句点实际上与字符匹配。什么都没有。所以如果你把它改成:

/^.+$/

它可能会更好用。

在第二个示例中,应该使用大括号{}而不是括号来指定长度。像这样:

/^[X]+[0-9]{4,}$/

最后一个看起来不错。但是,通过修复前两个问题,你至少可以开始寻找问题的根源!

^$分别匹配整个字符串的开头和结尾,而不仅仅是单个行的开头和末尾。

我看不出为什么需要regex,除非我遗漏了什么。

也许一种方法是将屏蔽的卡号输出为纯文本,并为新卡号提供一个文本框。

提交表单时,如果此字段为空,则在保存之前只需unset数组键,因此现有卡值保持不变。

如果有新号码,您可以根据需要进行更新。