js動的スティッチング正規表現の2つの方法


方法の1:プロジェクトをする時jsの検証フォームで正しい性を入力する需要があるかもしれません。この時はjsの正規表現を使う必要があります。例を挙げます。例えば、月を検証するなら、フォーマットは「yyy-M」です。この正規表現は簡単に書けます。本当に書けないです。Google、Baiduもできます。ネット上の例はたくさんあります。しかし、このようにJs正規表現を書くと、新しい問題があります。もし配置ファイルの月フォーマットが変更されたら?‘yyyyMM’に変更するか,‘yyy’_.MM'は?私たちはjsの正規表現を何度も繰り返すことを覚えていますか?この時に私達は聞きたいのですが、どうやって動的な正規表現を書くことができますか?配置ファイルを修正したら、コードを使う必要がなくなりますか?筆者はjsマニュアルを見ましたが、文字列を正規表現に変換する方法は見つけられませんでした。シナリオを動的に実行する方法で、間接的にこの問題を解決します。より汎用的なコードを作成します。上記のような一般的な解決策を以下に貼り付けます。
 
/**
*
* pattern :
* id : id
*/
function validateMonth(pattern, id) {
var text = document.getElementById(id);
var monthStr = text.value;
var splitChar = "";
if(pattern.length > 6) splitChar = pattern.substring(4, pattern.length - 2);
eval("var re = /\\d{4}" + splitChar + "\\d{2}$/;");
//var re = /\d{4}-\d{2}$/;
if(monthStr.match(re) == null) {
alert(" [" + pattern + "] !
" + "e.g \"2010" + splitChar + "11\" or \"2010" + splitChar + "03\"");
text.value = "";
text.focus();
return false;
}
return true;
}
 
/**
*
* pattern :
* id : id
*/
function validateMonth(pattern, id) {
var text = document.getElementById(id);
var monthStr = text.value;
var splitChar = "";
if(pattern.length > 6) splitChar = pattern.substring(4, pattern.length - 2);
eval("var re = /\\d{4}" + splitChar + "\\d{2}$/;");
//var re = /\d{4}-\d{2}$/;
if(monthStr.match(re) == null) {
alert(" [" + pattern + "] !
" + "e.g \"2010" + splitChar + "11\" or \"2010" + splitChar + "03\"");
text.value = "";
text.focus();
return false;
}
return true;
}
には、動的にシナリオ文字列をつづってeval()に送る方法が実行される場合、文字'\'の変換方法が必要です。