2012-07-11 84 views
0

我正在为我的用户创建更新结算信息部分。我目前正在将一张蒙面的信用卡号码传递给表单。如果用户只想更新他们的帐单地址,我不希望用户更新他们的信用卡信息。CakePHP使用正则表达式验证伪造信用卡

我试图用正则表达式匹配蒙面信用卡,但我一直没能得到任何正则表达式模式来匹配......甚至100%通配符...

这里有几个例子我曾试过...

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

假面信用卡值为XXXXXXXXXXXX0012

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

'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, 
      ), 
    ), 

任何想法非常赞赏!

谢谢!

回答

2

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

/^.+$/ 

它可能会更好。

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

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

尽管最后一个看起来不错。但通过解决前两个问题,您至少可以开始寻找问题的根源!

+0

和第一个在'/'前后都应该是'/ ^。* $ /' – 2012-07-11 19:14:30

+0

确实!将它们添加到我的答案中。 – SilverSnake 2012-07-11 19:17:29

+1

/^ [X] + [0-9] {4,} $/works,事实证明,我的团队中的一位开发人员已经从控制器中的模型中覆盖了验证,非常感谢您的帮助! =] – 2012-07-12 02:54:48

0

^$分别匹配整个字符串的开始和结束,而不仅仅是单独的行。

0

看不出为什么你需要这个正则表达式,除非我失去了一些东西。

也许做到这一点的一种方法是输出蒙板卡号作为纯文本,并提供新卡号的文本框。

当表单提交时,如果该字段为空,那么在保存之前只需unset数组键,所以现有卡的值保持不变。

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

+0

“也许有一种方法可以输出蒙面卡片号码,只需输入纯文本,并为新卡片号码提供一个文本框。”这是一种很好的思维方式! =]谢谢! – 2012-07-12 02:56:12