作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
field_validation_field_validation_validators是一个钩子函数,实现的就是我们自己定义的钩子hook_field_validation_validators,它类似于hook_menu,返回的是一个数组,在这个数组里面,可以定义多个验证器,我们这里只定义了一个regex,正则表达式。在单个验证器数组里面,它包含5个键,name、component_types、custom_error、custom_data、description。都是直接来自于webform_validation的。我在这里出于方便的考虑,做了取舍,比如每个验证器都是需要自定义错误消息的,而在webform_validation里面,只有部分验证器可以自定义错误消息,为什么?其中一个原因就是,这些错误消息,需要用到英文,如果将来定义的验证器类型比较多的话,需要写很多这样的英文,自己的英文读还可以,写就不行了,怕出问题;另外一个就是,如果用英文的,还需要翻译,这对很多非英文的用户不方便,特别是中文用户;出于这两点考虑,我全部采用了自定义消息。这里的component_types其实应该改为field_types,表示这个验证器适用于哪些字段类型,实际上,我在程序里面,省去了这一检查,就是说一个验证器适用于所有的字段类型,这也是一个改进。在webform_validation,只有适用于一个组件类型的验证器,才能应用到该组件上,webform的组件类型比较少,主要定义在webform模块里面,而field的类型,除了Drupal核心自带的,很多第三方模块还定义了很多。我希望一个验证器可以应用于所有的字段类型,这一点上面不加限制,至于是否真的适用,由用户自己决定,而不是交给程序,写死在这里。