2011-11-07 5 views
0

ユーザー入力を正規表現と照合する5つの関数があります。これらの正規表現は抽象化され、previous postに示唆されています。手続き型コードを連想配列オブジェクトに連結

今、私は機能を抽象化して、前の投稿ごとに連想配列にコードを入れたいと思っていますが、これはベストプラクティスかどうかという点でいくつかの意見がありましたか?このO.Kはやっていますか?

これらの関数を関数の連想配列に入れるのは良い方法ですか?これを行う前のポストはアップではありません。私は彼らがそれに反対することを推測しています。

しかし、基本的には、同様の方法を適切にまとめてグループ化する方法です。

EDIT 1: // consolidated regular expressions 

var patterns = { 
    name: /^[a-zA-Z-\s]{1,20}$/, 
    email: /^[a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{1,4}$/, 
    pass: /.{6,40}/, 
    url: /^[-\w&:\/\.=\?,#+]{1,}$/, 
    aml: /<(.+)_([a-z]){1}>$/ 
}; 

// checks full name which allows characters and dashes 

function check_name(text,id,res) 
    { 
    for(var d=0;d<=0;d++) 
    { 
    if(!patterns["name"].exec(text.value)) 
     { 
     o2(id,res); 
     return 0; 
     } 
    } 
    return 1; 
    } 

// checks for valid email form 

function check_email(text,id,res) 
    { 
    if(!patterns["email"].exec(text.value)) 
    { 
    o2(id,res); 
    return 0; 
    } 
    return 1; 
    } 

// checks for password length 

function check_pass(text,id,res) 
    { 
    if(!patterns["pass"];.exec(text.value)) 
    { 
    o2(id,res); 
    return 0; 
    } 
    return 1; 
    } 

// checks for valid url form 

function check_url(text,id,res) 
    { 
    if(!patterns["url"].exec(text.value)) 
    { 
    o2(id,res); 
    return 0; 
    } 
    return 1; 
    } 

// checks for aml form 

function check_aml(text) 
    { 
    if(a=patterns["aml"].exec(text)) 
    { 
    if(a[2]=='p') 
     { 
     return 0; 
     } 
    else if (a[2]=='f') 
     { 
     return 1; 
     } 
    } 
    else 
    { 
    return 2; 
    } 
    } 
+0

投稿を校正することができます... –

答えて

0

パターンを保存する共通の場所を作成することに問題はないとは思いません。実際これは良いアプローチのようです。しかし、あなたの個別のチェック機能にグローバルストレージを認識させる必要はありません。彼らは代わりに、彼らがチェックしているパターンとチェックするソースを単に認識させるべきです。あなたがこのアプローチを取る場合は、あなたのチェックコードが劇的にここ

var make_check = function (pattern) { 
    return function (text, id, res) { 
    if(!pattern.exec(text.value)) { 
     o2(id,res); 
     return 0; 
    } 

    return 1; 
    }; 
}; 

var check_name = make_check(patterns.name); 
var check_email = make_check(patterns.email); 
var check_pass = make_check(patterns.pass); 
var check_url = make_check(patterns.url); 

を簡略化することができ、私はチェック機能からグローバルストレージの概念を削除しました。コードの残りの部分は非常に似ているので、一致するパターンを渡す単一のメソッドに抽象化することができます。

+0

パターン["名前"]の代わりにpaterns.nameを使用できますか? –

+0

@ChrisAaker一般的にはいそれは可能です – JaredPar

+0

この作品...パターン。名前...あなたが言ったように...私はパターンを渡すことに苦労しています... IEは私が外にreutrnステートメントを持っていると私に言っている私が明らかにしないときに機能する?...私に見せてください。 –