2012-09-10 7 views
5

私は基本的に私のページで次の検証を行っています。つまり、テキストボックス内の説明は、単語 'and'を除いて3ワード以上にすることはできません。私は以下のサーバーサイド検証をC#でうまく動作しています。JavascriptでC#サーバ側のバリデーションを複製

if (Desc.Trim().ToString() != "") 
{ 
    MatchCollection collection = Regex.Matches(Desc.Replace("and", ""), @"[\S]+"); 

    if (collection.Count > 3) 
    { 
     ErrorMsg.Append("Description should contain at most 3 words(excluding 'and')."); 
     ErrorMsg.Append("\\n"); 
    } 
} 

しかし、私はJavascriptで同じ作業をするのが難しいです。私は以下を試してみましたが、これまでのところ動作していないので、Javascriptの知識がある方にはエラーが表示されることを期待しています。ページが起動するより大きい検証関数の一部であることに注意してください。警告はちょうどそこに入っているかどうかを調べるためのものでした(これはそうではありません)。 - ブロックが削除されたとき、ページ上のJSの残りはうまく動作します。

if (Desc.val().trim() != "") 
{ 
    alert('1'); 
    !regexWordRule.test(Desc.val()); 
    alert('2'); 

    if (Desc.val().match(regexWordRule).length > 3) 
    { 
     errorText += "Description should contain at most 3 words(excluding 'and')."; 
    } 

    valid = false; 
} 

以下は、jsファイルの最上部に定義されたregexWordRuleです。

var regexWordRule = /[\S]+/; 

答えて

2

あなたは、より良い解決策を見つけることができますが、このアプローチは、私の心に来たので、私はそれを掲示しています:

var input = "and lorem and ipsum"; 

// remove ands 
var deandizedinput = input.replace(/\band\b/g, ' '); 

// replace all white spaces with a single space 
var normalizedinput = deandizedinput.replace(/\s+/g, ' '); 

// split the input and count words 
var wordcount = normalizedinput.trim().split(' ').length; 

フィドルhereを。

+0

これは素晴らしい作品です - 多くのありがとうございます。私の理解のために、あなたは削除と検索の\ bを説明できますか? –

+1

\ bは単語境界に一致します。ここでは、スタンドアロンの単語 'and'のみを削除し、それを含む単語(バンド、風景など)からは部分文字列を削除しないようにしています。 @ Dimaの回答も参照してください。これは、リモート検証を検討することを示唆しています。これは検討する価値があります。 –

1

MVC3を使用している場合は、モデル(RemoteAttribute)でリモート検証を使用できます。 または、ajaxリクエストでこのような種類の検証を手動で行うことができます。

これにより、コードの重複が防止されます。

関連する問題