所以我正在使用Zend_Framework,我需要验证一个文本,不仅要接受数字和普通字母,还要接受像'ã','ç'等一些人......
我确信一个简单的正则表达式验证可以完成这项任务:
public function SetTitle($title)
{
$validator = new Zend_Validate_Regex('/^[0-9a-zA-ZÀ-ú]+[0-9A-Za-zÀ-ú\'\-\.:,; ]{1,50}$/');
if ($validator->isValid($title)) {
if ($this->title != $title) {
$this->title = $title;
}
} else {
throw new MyApp_Projects_ProjectException("This ($title) is not a valid title.");
}
} //SetTitle
并且在下面报告了一些想法之后,我测试了这样的事情,这真的很有用:
public function testIfCanAttributeTitleToProject()
{
$someTitle = "some title with ç, á and ã";
$this->project->SetTitle($someTitle);
$this->assertEquals($this->project->getTitle(), $someTitle);
}
但是,当我尝试添加验证器来检查表单中的数据时,如下所示:
$title = new Zend_Form_Element_Text('title');
$title->setLabel('Nome:')
->setOptions(array('size' => '50'))
->setRequired(true)
->addValidator('Regex', false, array(
'pattern' => "/^[0-9a-zA-ZÀ-ú]+[0-9A-Za-zÀ-ú\'\-\.,: ]{1,50}$/"
))
->addFilter('HtmlEntities')
->addFilter('StringTrim');
// attach elements to form
$this->addElement($title);
当我尝试测试时出现错误
public function testUserCanUseAccentedCharacters() {
$form = new MyApp_Form_ProjectCreate();
$formData = array(
'title' => 'we scream to weird chars like ã é or ç',
'submit' => true
);
$form->process($formData);
}
过程函数如下:
public function process($data)
{
if ($this->isValid($data) !== true) {
throw new MyApp_Form_ProjectCreateException('Invalid data!');
} else {
$db = Zend_Registry::get('db');
$projectMapper = new MyApp_Projects_ProjectMapper($db);
$project = new MyApp_Projects_Project();
$project->SetTitle($this->title->GetValue());
$projectMapper->insert($project);
}
}
我已经在其他上下文中检查并重新测试了正则表达式,看起来没问题,但由于某些原因,即使Zend_Validate本身与此表达式一起使用,表单元素中的验证器也不接受À-ú中的任何内容。范围...
当然,我(仍然)在这里失去一些基本的东西......或者当我有更好的方法时,我的头靠在墙上......
有人可以帮助我吗?
TIA,再次......:)
答案 0 :(得分:1)
'/^[0-9a-zA-ZÀ-ú]+[0-9A-Za-zÀ-ú\'\-\. ]{1,50}$/'
嵌入单引号。这对你有用吗?
"/^[0-9a-zA-ZÀ-ú]+[0-9A-Za-zÀ-ú\'\-\. ]{1,50}$/"
<强>更新强>
还有三件事要尝试。我不知道Zend实现正则表达式的细节,所以我不知道前两个是否有效。
Unicode Letter属性:
"/^([0-9]\p{Letter})+([0-9\'\-\. ]\p{Letter}){1,50}$/"
Posix角色类:
"/^([0-9][[:alpha:]])+([0-9\'\-\. ][[:alpha:]]){1,50}$/"
您关注的字母的强力枚举:
"/^[0-9a-zA-ZÀÁÂ ...et cetera... øùú]+[0-9A-Za-zÀÁÂ ...et cetera... øùú\'\-\. ]{1,50}$/"