いろいろ技術的メモ

仕事に差し障りない範囲で、関連ネタなど…

jquery.validationEngine 1

なかなか便利だよね。これ。

 

公式はこれかな。

github.com

 

 

1:load順

各言語のlanguageファイルが先なの?

直感的じゃないけど、公式のdemoのソース見る限り、そんな感じだ。

 

 

2:カスタマイズ

-ja.jsファイルを書き換えろって記述いっぱいあるんだけど、書き換えても「そんな定義はない」って怒られるな。

jqv:custom rule not found

最小構成でhtmlファイルで記述すると、この方法で動くんだけど…。環境で何かまずいのかもしれん。面倒なので調べない。

 ここでは別アプローチについて記述する。demoみていると、普通にあるので、そっちみてもOK。

 

validationEngineのフォームへの適用などを記述した、scriptタグの、その下あたりで以下の関数などを定義。このregexp判定自体には突っ込みどころがあるのだが、それは後述。

function checkKatakana(field, rules, i, options){
	if ( !field.val().match( /^[ア-ンァ-ォャ-ョー]+$/ ) ) {
		// un match
		return "* 全角カタカナで入力してください";
	} else {
		return "OK!";
	}
}

 関数の引数の説明は以下の感じ。demoの中で書いてある。

/**
* @param {jqObject} the field where the validation applies
* @param {Array[String]} validation rules for this field
* @param {int} rule index
* @param {Map} form options
* @return an error string if validation failed
*/

 

要はチェックしてエラーがあればエラーメッセージを返せば良い。返さなければ成功となる。上の関数ではelse節を消せば本来の正しい判定となる。

ローカルチェック用でsubmitさせたくなければ、else節を書いて何かreturnしてやると、問題なくてもエラー扱いで送信されない。関数の判定のチェック用に。

なお、判定の呼び出し記述は以下。 

class="validate[required,maxSize[128],funcCall[checkKatakana]]"

すごく楽ー。javaScriptでクライアント側で入力チェックって、汎用的に出来そうなのに妙に面倒だったもんなぁ。web系しばらくサボってたから、こんなの知らなかったよ。w 

この funcCallで入力判定を仕込むアプローチは、全体では使わないけど特定画面で変な判定が必要なケースとか、既存実装があって、ちょっとファイル改変の影響が怖いとかの時には、悪くない方法かも。regexpチェックするだけなら、改変の方が早そうではあるけどね。w

 

 

3:ところで。

上のカタカナ判定のRegexp判定部分は、webで拾ってきたもの。これ意味分からないんだよね。w

他に見かけるのは

/^[ァ-ンー]+$/

こんな感じの、もっとシンプルなものが多いかな。実はまだこっちの方が筋が通ってる。あんなに分ける必要がある文字コードってあるのかな。shift-jisとeuc-jpとutf-8は確認したけど。おそらく指定範囲が被っているので微妙では?内部で最適化してくれるのかな。

 

そして、これらの判定だと、以下のカタカナ文章はエラーとなる。

ヴァルヴレイヴ

この辺、文字コードにも依るのだが、UTF-8の場合、以下のコードを持つ。

UTF8 3byte(e3)

カタカナは [e3 82 a1] ァ から始まるが、[e3 83 b3] ン で終わっていない。

わざわざ長音記号を含めているのは、これがン以降で少し離れているからだが、間の他の文字を使わない確証がないのなら、入れておく方が良いのかもしれない。w

これを考慮する場合、以下の判定になる。(UTF-8の場合)

/^[ァ-ヺー]+$/

 

まぁ、ちょっとしたネタですが。w