【发布时间】:2014-01-16 21:23:38
【问题描述】:
到目前为止,Prestashop 提供的开箱即用功能给我留下了深刻的印象,但这件事真的让我失望:如果有人想在网站上注册或做访客结账,他可以将任何东西作为他的名字。任何内容都包括“---”、所有空格、“*”等。这里没有提供验证,这真的很烦人。
我尝试修改 website\controllers\front\AuthController.php 中的 processSubmitAccount 方法以使用 Validate::isName() 方法,但这根本没有帮助。它允许用户将所有奇怪的字符放在名称字段中。我尝试在 Validate 类中创建另一个方法:
public static function isHumanName($name)
{
return preg_match('/^[A-Za-z]+$/', $name);
}
但由于某种原因,这种简单的模式不起作用。我想要做的就是允许像“FirstName MiddleName”这样的名称一次只有一个空格字符,而不是在名称的开头。我的 php 和 regex 技能很少,这就是我迄今为止想出的全部。
编辑:可接受的名称是:
- 名字
- 名字第二个第三个第四个第五个
- 名称可以不区分大小写。
看完cmets后,我想我会放弃验证地址,所以在下面的段落中删除了。
除了姓名之外,我还想验证地址和电话号码。地址除了字母之外还可以有数字,而电话号码只能有数字。我想如果验证名称的问题得到解决,那么我也可以对地址和数字进行验证。
如果有人能指引我正确的方向,我将不胜感激。
PS:执行命名政策是对还是错是一个单独的辩论。 *免责声明:这个问题的答案并不意味着读者在他们的生产应用程序中使用相同的东西来验证名称。*
【问题讨论】:
-
我不会,请参阅this。地址也是如此。但是,您可能会做出足够好的表达来验证电话号码(但我会保持宽容)。
-
O'Brien怎么样?带有重音符号或非 ASCII 字符的名称呢?基本上,您应该接受名称可能不符合特定标准的事实。 -
谁是反对者,为什么? @SamSullivan 看着链接我知道我们永远不应该验证名字?那么我该如何称呼一个名字为 --- 或 ''' 的人呢?您好先生三重单引号?
-
@sttaq 所以你最好用简单的语言定义你认为可以接受的条目作为起点。
-
@Sam 我明白你的意思,有效的名称政策并不重要。我想学习如何制作这样的正则表达式。该政策由雇主口述,由我自己执行。我只能提出你的建议。我不能争辩。我必须按照他们想要的方式实施。
标签: php regex validation prestashop-1.5