2010-05-13 21 views
0

在我的Web應用程序中,我創建了一些框架,用於綁定模型數據以在頁面上進行控制。每個模型屬性都有一些規則,如字符串長度,非空和正則表達式。在提交頁面之前,框架使用定義的規則驗證任何綁定的控件。如何使用JavaScript檢測當前正則表達式中允許的字符?

所以,我想檢測中允許像下面的例子中,每個正則表達式規則是什麼性格。

"^[0-9]+$" allow only digit characters like 1, 2, 3. 
"^[a-zA-Z_][a-zA-Z_\-0-9]+$" allow only a-z, - and _ characters 

但是,這個功能不應該關心分組,定位允許的字符。它只是講述可能的人物。

你有創建這個函數的任何想法?

PS。我知道很容易創建指定的函數,例如只允許數字字符的數字。但我需要共享/重複使用同一段代碼,包括數據層(包含所有模型驗證程序)和UI層,而不需要修改任何內容。

感謝

+0

'^ [A-ZA-Z _] [A-ZA-Z_-0-9] + $'是錯誤的;在末尾加上連字符:'^ [a-zA-Z _] [a-zA-Z_0-9 - ] + $'這又是多餘的:使它成爲'^ [a-zA-Z _] [\ w-] + $'或甚至更好:'/^[a-z _] [\ w - ] + $/i' – Amarghosh 2010-05-13 12:44:40

+0

'^ [0-9] $'只允許一個數字,用一個+來允許一個或多個。 '^ [0-9] + $'或'^ \ d + $' – Amarghosh 2010-05-13 12:46:14

+0

哦,是的,考慮改寫問題以使其更清楚。 – Amarghosh 2010-05-13 12:50:47

回答

0

你解決不了這個對於一般情況。正則表達式通常不會在某個特定角色處於「失敗」狀態,他們只能達到無法再匹配的點,並且不得不回溯嘗試其他匹配方法。

一個能有這樣的想起這是它成功回溯之前相匹配的最遠的,但大多數實現不這樣做,包括JavaScript的正則表達式實現。

一種可能的解決方法是首先匹配^pattern$,如果匹配的結果是^pattern沒有末尾錨。這將更有可能讓你對字符串的左手部分進行某種匹配,所以你可以計算匹配中有多少個字符,並且說下面的字符是'無效的'。對於更復雜的正則表達式,這會引起誤解,但它肯定適用於像[a-zA-Z0-9_]+這樣的簡單情況。

+0

我想在您回答時只檢測特殊情況。它必須像^ [一些正則表達式] $,並且不包含像回溯一樣的複雜正則表達式。 – 2010-05-13 13:01:34

+0

是的,當失敗時嘗試匹配而沒有'$'。如果你得到一個匹配,'match [0] .length'會給你第一個不匹配的字符的索引。 – bobince 2010-05-13 13:06:31

+0

我不想每次使用按鍵運行正則表達式。這對我來說是相當昂貴的計算成本。我只是想要一些處理一些正則表達式來顯示哪些字符是可能的,並檢查鍵被按下。如果未驗證,JavaScript將取消當前事件。 – 2010-05-13 13:16:21

0

我必須承認,我掙扎,分析你的問題。

如果你正在尋找一個正則表達式,如果字符串完全字符的收取一定的組成,將只匹配,而不管它們的順序,那麼你的性格類的例子是相當接近了。

例如,^[A-Za-z0-9]+$將只允許以字母A到Z(大寫和小寫)和數字,以任意順序和任意長度組成的字符串。

+0

我很抱歉。我沒有解釋什麼是「正則表達式附近的兩個詞」。你可以在http://www.regular-expressions.info/near.html – 2010-05-13 12:56:50

+0

看到更多的細節。我知道「正則表達式」附近的兩個詞是什麼意思;我只是不明白你想用它做什麼。你寫「順便說一下」,所以它與你的問題沒有關係,或者它有問題?編輯:我看到你已經刪除了那一點,所以我已經刪除了我的,也是:) – 2010-05-13 13:00:23

+0

我只是舉一些關於不應該被處理的複雜正則表達式的例子。 – 2010-05-13 13:05:28

相關問題