2010-08-12 23 views
0

我正在使用单轨,activerecord和jquery。我有一个邮政编码文本框的表单。我有关联的形式我的活动记录类:ValidateRegExp客户端与服务器端问题

[Property] 
     [ValidateNonEmpty] 
     [ValidateRegExp(@"/^\d{5}(-\d{4})?$/", "Invalid")] 
     public string ZipCode { get; set; } 

正如你所看到的,我使用的是ValidateRegExp属性,然后自动生成jQuery的验证规则。问题是JavaScript中的正则表达式与C#中的正则表达式不同。 Javascript需要在正则表达式之前和之后,而C#没有。如果我把斜杠,然后jQuery验证将工作,但如果他们绕过javascript验证和提交表单禁用js(或者如果有人通过另一种方式像测试案例保存对象),那么它会说邮编是无效,因为C#不喜欢斜杠。

所以我的问题是,你如何请一个正则表达式的JavaScript和C#都?我希望它足够聪明,可以在jQuery验证之前和之后添加斜杠,以便您可以在C#中指定正则表达式,而不使用斜杠,但情况并非如此。

+0

如果你指定你正在使用哪个版本的Monorail,以及你使用哪个版本的jQuery和jquery.validator正在使用 – 2010-08-12 04:05:46

回答

1

您应该指定正则表达式本身,而不包括周围的/字符。

如果您遇到客户端问题,那么如果您将包含您看到的JS错误(如果有)以及由Monorail写入页面的页面上的实际生成的JS代码,以及您正在使用的Monorail版本。

作为边注,让我们看看码生成从确认属性的JS验证规则在JQueryValidator.cs

相关片是在线路378(作为代码库的当前版本):

  "function(value, element, param) { return new RegExp(param).test(value); }" 

它指出使用new RegExp(expression)这一事实,而不是/expression/格式。有了这个 - 显然单轨的jQuery验证器集成是可以的。

0

我正在使用jQuery 1.4.2。不知道我使用的是哪个版本的MonoRail,Castle.MonoRail.Framework dll说v2.0.0.0。我在最近3个月内更新了它,尽管它是相当新的。您显示的js表示您拥有比我更新的版本,因为它会为我生成以下内容(如果ValidateRegExp表达式中未包含斜杠):

“user.username”:{required:true ,regExp:^ [\ w] {4,50} $}

这显然给出了js中的语法错误,因为它没有用引号或斜线包住。我最终创建了一个新的RegExp验证器,并使用AbstractValidator作为基类来解决我的MonoRail版本中存在的错误问题。

你知道这是否是在过去几个月中已修复的问题吗?否则我不能解释你是如何在js中生成新的RegExp的,而我的不是这样的...