1

我想建立一个在线信息管理系统,它会有一些中文输入。但是,ZF2 的验证器无法验证中文。我应该怎么做才能验证中文输入?创建自定义验证器?如何创建一个?非常感谢!!!

详情见这里:

There are actually 3 languages which are not accepted in their own script. These languages
are korean, japanese and **chinese** because this languages are using an alphabet where a
single character is build by using multiple characters.

In the case you are using these languages, the input will only be validated by using the
english alphabet.
4

1 回答 1

1

ZF2 中没有这样的中文或日文验证器。

您可以做的是构建自己的小型验证器类。我结合了 PHP 检查字符串是否有中文字符如何检查单词是日语还是英语,使用 PHP通过为您扩展抽象验证器来构建这两个小型验证器:

namespace MyApp\Validator;

use Zend\Validator\AbstractValidator;

// forgive the name of this class
class IsNotOrientalLanguage extends AbstractValidator
{
    /**
     * {@inheritDoc}
     */
    public function isValid($value)
    {
        $this->abstractOptions['messages'] = array();

        if (preg_match('/\p{Han}+/u', $value)) {
            $this->abstractOptions['messages'][] = 'Chinese not allowed.';
        }

        if (preg_match('/[\x{4E00}-\x{9FBF}]/u', $value)) {
            $this->abstractOptions['messages'][] = 'Kankji not allowed.';
        }

        if (preg_match('/[\x{3040}-\x{309F}]/u', $value)) {
            $this->abstractOptions['messages'][] = 'Hiragana not allowed.';
        }

        if (preg_match('/[\x{30A0}-\x{30FF}]/u', $value)) {
            $this->abstractOptions['messages'][] = 'Katakana not allowed.';
        }

        return ! $this->abstractOptions['messages'];
    }
}

您现在可以在任何地方使用此验证器:

use Zend\InputFilter\Input;
use MyApp\Validator\IsNotOrientalLanguage;

$input = new Input('blog_post');

$input->getValidatorChain()->attach(new IsNotOrientalLanguage());
于 2013-03-18T02:25:41.180 回答