2012-05-14 42 views
2

我正在使用MVC 3和knockoutjs庫的應用程序。另外我正在研究淘汰賽驗證插件。我需要驗證允許的符號的輸入文本值。據我所知,這些都沒有原生規則,所以我將不得不創建一個自定義規則。壞消息是我在正則表達式和javascript方面的知識很差。我需要編寫一個驗證文本框輸入字段並且不允許非英文字符的自定義函數。所有其他符號都是允許的。我想我將能夠創建自定義規則,但我需要驗證輸入字段的正則表達式。任何幫助工作的例子將不勝感激。謝謝!使用knockoutjs驗證非英文字符輸入文本框的自定義規則

回答

2

不允許非英語字符

所有其他符號都是允許

似乎矛盾的我,但我會盡力幫助: )

首先你應該考慮使用Ajax進行驗證,因爲服務器端語言通常對Unicode有更好的支持。如果它不是一個選項,那麼首先添加XRegExp圖書館與Unicode plugin到您的網頁。

要創建一個支持Unicode的正則表達式使用以下格式:

var englishLettersOrSymbols = XRegExp('[\\p{^Letter}\\p{Latin}]*'); 

在這裏,我們說,我們接受零個或幾個(... *)符號,每個符號是([ ... ])非字母(\\p{^Letter} )或基本拉丁字母(\\p{Latin})的信件。

現在您的自定義的驗證規則是這樣的:

ko.validation.rules['englishLettersOrSymbols'] = { 
    validator: function(value){ 
     var rule= XRegExp('[\\p{^Letter}\\p{Latin}]*'); 
     return rule.test(value); 
    }, 
    message: 'Sorry, {0} this is not valid' 
}; 

,你會用它在你的代碼是這樣的:

var vewModel = { 
    // ... 
    myField: ko.observable().extend({englishLettersOrSymbols: true}), 
    // ... 
}; 

編輯:從正則表達式中刪除| 。謝謝,@slevithan。這不是一個錯誤本身因爲\\p{^Letter}已經包含|符號,因此,正則表達式仍然有效。但是,這是相當具有誤導性的。

+0

我的意思是允許所有其他符號。謝謝安德魯的迴應。我想知道爲什麼我應該使用XRegExp庫?我現在正在閱讀test()方法的規範,如果我只通過模式化允許的符號並檢查它們是否匹配,這將完成這項工作。 – Mdb

+0

就像我說默認JavaScript正則表達式不支持Unicode。因此,如果沒有XRegExp,我就不能編寫'\\ p {^ Letter}'。花括號中的這些名稱是Unocode類的名稱,而JavaScript正則表達式引擎根本不知道它們。 –

+1

@Andrew,你不應該在字符類中加入'|'來表示「或」。它沒有。你正在做的只是將豎線添加到角色類可匹配的角色列表中。即,'[a | b]'相當於'(?:a | b | \ |)'。 – slevithan