Zend_Validate_Alnumがなんかおかしい

Zend Framework公式リファレンスによると

34.2.1. Alnum
$value が英数字のみで構成されているときにのみ true を返します。 このバリデータでは、オプションとして空白文字を認めることもできます。

ってことらしいけど、普通に全角日本語が素通りする。
調べてみるとどうやら、UTF-8環境下でのバグらしい。

Zend_Validate_Alnumのソースをみてみると107行目あたりで
self::$_filter = new Zend_Filter_Alnum();
と書いてある。
そうか、貴様が犯人か。
というわけでZend_Filter_Alnum読んでみる。
74行目あたりから

public function filter($value)
{
$whiteSpace = $this->allowWhiteSpace ? '\s' : '';
if (!self::$_unicodeEnabled) {
// POSIX named classes are not supported, use alternative a-zA-Z0-9 match
$pattern = '/[^a-zA-Z0-9' . $whiteSpace . ']/';
} else {
// Unicode safe filter for the value
$pattern = '/[^\p{L}\p{N}' . $whiteSpace . ']/u';
}

return preg_replace($pattern, '', (string) $value);
}

unicodeの時のみ違う処理をしているみたい。
で、なんで、unicodeの場合 ^a-zA-Z0-9 だと駄目なんだろう。
とりあえず、$pattern = '/[^\p{L}\p{N}' . $whiteSpace . ']/u'; ここを修正すれば良いんだな。
で、、、どうするんだろう?
^a-zA-Z0-9 じゃ駄目ですか?

コメントにて教えていただきました。
$pattern = '/[^\p{Ll}\p{Lu}\p{N}' . $whiteSpace . ']/u';
これでいけるようです。