在Javascript中复制C#服务器端验证

时间:2012-09-10 11:29:37

标签: javascript validation

我基本上在我的页面上进行了以下验证 - 它是一个单词规则,因为文本框中的描述不能超过3个单词,不包括单词'和'。我在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知识的人可以看到错误。注意if是在页面上触发的更大验证函数的一部分 - 警报只是在那里看它是否进入这个if(它没有) - 当这个块被删除时,页面上的其余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 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果您使用的是MVC3,则可以在模型(RemoteAttribute)上使用远程验证。 或者你可以使用ajax请求手动进行这种验证。

这样可以防止代码重复。