2011-02-24 104 views
0

我試圖創建一個自定義jquery驗證規則來對文本框上的值執行正則表達式。這裏是規則:帶反斜槓的jQuery自定義驗證規則

$.validator.addMethod("validateRegExp", function (value, element, pattern) { 

      console.debug("pattern: " + pattern); 

      var regex = new RegExp(pattern); 
      var isMatch = regex.test(value); 

      console.debug("value: " + value); 
      console.debug("result: " + isMatch); 

      return isMatch; 
     }); 

這裏是HTML:

<input type="text" class="{ "validateRegExp": "^\d{1,2}:\d{2}(\s)*(AM|am|PM|pm)$", messages: { "validateRegExp": "Invalid Time" } }" maxlength="8" value="8:00 AM" name="TuesdayStartTime" id="TuesdayStartTime" /> 

出於某種原因,當調用自定義validateRegExp方法,模式屬性設置爲:

^d {1,2}:d {2}(s)*(AM | am | PM | pm)$

正如您所看到的,反斜槓已被刪除。我甚至可以放入2或3個反斜槓,每個反斜槓都應該去,而當它進入這個方法時,所有的反斜槓都會被濾掉。我如何得到這個工作?

回答

0

答案是在正則表達式中爲每個1放入4個反斜槓,因爲它被解析兩次,一次是以編程方式創建的,其次是jQuery.metadata。

title.append($("<div class='section'><input id='" + id + "_EndTime' name='" + id + ".EndTime' value='" + 
      (day.EndTime ? day.EndTime : "") + "' type='text' maxlength='8' " + 
      utils.addValidationRuleHtml("validateRegExp", "^\\\\d{1,2}:\\\\d{2}(\\\\s)*(AM|am|PM|pm)$", "Invalid Time") + " /></div>")); 
0

您似乎試圖在雙引號內使用雙引號。將一些改爲單引號。例如

<input type="text" 
     class="{ validateRegExp: '^\d{1,2}:\d{2}(\s)*(AM|am|PM|pm)$', 
       messages: { validateRegExp: 'Invalid Time' } 
       }" 
     maxlength="8" 
     value="8:00 AM" 
     name="TuesdayStartTime" 
     id="TuesdayStartTime" /> 

不知道這是否會有所幫助(我從來沒有見過類指定過這種方式),但它不能讓它變得更糟。

+0

對不起,我有類=「」,然後弄亂了引號的是,複製/粘貼的內部的串從螢火蟲雙引號(是動態生成的輸入,所以我不能從源複製)類看起來就是這樣,因爲它使用jquery.metadata,它允許你聲明性地指定驗證規則。 – Justin 2011-02-24 21:42:56