The concept basically boils down to adding a Zend_Validate_Identical validator to the 'confirmpassword' field, using the data from the $this->_request->getParam('password') to test against. I use a custom method on an extended Zend_Form to process the post data from all my forms, it isn't an exact solution for you, but perhaps my code from my "EditUser" form can point you in the right direction.
From the controller:
// $form is a MW_Form_EditUser. if ($this->_request->isPost() && $form->process($this->_request->getPost())) { // successful form - redirect or whatever here }
From the MW_Form_EditUser class:
public function process(array $data) { // gets a copy of the user we are editing $user = $this->getEditable(); // checks to see if the user we are editing is ourself $isSelf = ($user->id == MW_Auth::getInstance()->getUser()->id); // if the new_pass field is non-empty, add validators for confirmation of password if (!empty($data['new_pass'])) { $this->new_pass2->setAllowEmpty(false)->addValidator( new Zend_Validate_Identical($data['new_pass']) ); if ($curpass = $this->current_password) $curpass->setAllowEmpty(false); } if ($this->delete && !empty($data["delete"])) { $this->delete->setValue(true); $user->delete(); return true; } if ($this->isValid($data)) { /// saves the data to the user $user->email = $this->email->getValue(); $user->name = $this->name->getValue(); if ($password = $this->new_pass->getValue()) $user->password = $password; if (!$isSelf) { if ($this->super->getValue()) { $user->setGroups(array(MW_Auth_Group_Super::getInstance())); } else { $user->setGroups(array(MW_Auth_Group_User::getInstance())); } } $user->save(); return true; } return false; }