如何在CakePHP中“validation”人名?

我有一个PHP脚本,应该检查“有效”的人名,但最近对空间的名称进行了破解,所以我们为我们的validation器添加了空格。
有没有办法将一个黑名单添加到CakePHP的validation器来阻止所有“无效”字符,而不是允许“有效”字符?

注意:我知道如何在PHP中执行此操作(通常),但是使用CakePHP的validation器语法是不同的。

我同意其他意见,validation名称可能是一个坏主意。

对于几乎所有你可以想到的要validation的东西,都会有一个名字破坏你的规则的人。 如果你对于阻止真实的人input他们的名字感到高兴,那么你可以尽可能多地validation它。 但是,您input的validation规则越多,您就越有可能find无法login的真实用户。

下面是一个页面的链接,其中描述了一些人们试图validation的明显的(而不是那么明显的)事情,

http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/

如果你想允许任何人进入你的网站,那么你真正希望的最好的办法是强制一个最大的字段长度,以适应你在数据库中分配的空间。 即使那样你也会惹恼某个人

没有办法“validation”。 你怎么能阻止一个真正叫的人:

罗伯特'); 学生表; –

http://xkcd.com/327/


编辑:我的意思是说,一些国家的人可能会用不同的语言(比如说日语,汉语,韩语)命名,甚至可能包含符号。 如果一个网站在input真实姓名时称您的名字“无效”,您会如何看待?

不要对名称如何拼写做任何假设。 接受任何input(是的, 任何 ),并显示时做适当的转义,所以你不会得到XSS的漏洞。

我build议你这样做在afterFind()模型中逃脱,所以你不要忘记它的地方。 如果需要访问普通数据,请将原始数据保存在模型的单独字段中,如['unescaped_name']。

自定义正则expression式validation

 var $validate = array( 'name' => array( 'rule' => '/^[^%#\/*@!...other characters you don\'t want...]+$/', 'message' => 'Only letters and integers, min 3 characters' ) ); 

尽pipe这是一个过于天真的做法,因为您必须将几乎所有的Unicode字符都列入黑名单。 你几乎只能做基本拉丁字符的白名单,加上空格和撇号等常见的怪癖。 除此之外,你会打一场艰苦的战斗,你不能赢。 您可能会随着时间的推移创build一个相当不错的algorithm,但它永远不会100%万无一失。 因此,要么限制你的用户到基本的拉丁名字(并希望不疏远你的听众)或完全跳过validation*

*或者投入几年的时间开发一个涵盖<100%人名的algorithm,工作时间为99.9%。