2011-04-18 86 views
0

我有一些問題得到一個正則表達式爲的RegularExpressionValidator到客戶端上運行:.aspx的工作的RegularExpressionValidator不同的客戶端和服務器

(?=.{8,})(?=.*[A-Z])(?=.*[\d])(?=.*[\W])|(?=.*[a-z])(?=.*[\d])(?=.*[\W])|(?=.*[A-Z])(?=.*[a-z])(?=.*[\W])|(?=.*[A-Z])(?=.*[a-z])(?=.*[\d]) 

這種表達應該返回true,如果提供的字符串

  • 由至少八個字符的
  • 具有三種四組「小寫字母」中的至少一個字符/ 「大寫字母」 /「數字」 /「的特殊字符」

使用在C#(.NET 3.5)這個表達式直接返回針對不同測試串預期的結果,但在客戶端瀏覽器內的有效字符串(例如aaaaBBB1)不起作用。

我讀過thread here,所以一個解釋是JavaScript的客戶端使用,與.NET實現相比,其工作方式略有不同。

現在我試圖在JavaScript中運行我的正則表達式來驗證在上面鏈接的線程中所做的參數,但在JavaScript中,我的正則表達式也與C#中的相同。

是否有另一種方式來獲取RegularExpressionValidator的工作?我不明白爲什麼JavaScript的作品(我預計它不會在閱讀實現差異後),但RegularExpressionValidator沒有。

預先感謝任何指向正確方向的指針。

G.

+0

對於特殊的「\ X」字符類(如「\ d」和「\ W」),不需要將它們寫爲「[\ d]」;這與「\ d」本身完全相同。 – Pointy 2011-04-18 14:16:20

+0

@Pointy - 謝謝,不知道, – Gorgsenegger 2011-04-19 06:34:03

回答

1

嘗試以下方法:

^(?:(?=.*[A-Z])(?=.*\d)(?=.*\W)|(?=.*[a-z])(?=.*\d)(?=.*\W)|(?=.*[A-Z])(?=.*[a-z])(?=.*\W)|(?=.*[A-Z])(?=.*[a-z])(?=.*\d)).{8,}$ 

你的正則表達式將允許8下長度的字符串來傳遞,因爲長度斷言只是第一交替的一部分。

然後(這可能是問題)你的正則表達式從來沒有匹配任何文本,它只是斷言。因此,我將字符限制外的「長度正則表達式」作爲實際匹配。

這應該適用於JavaScript和.NET。

+0

謝謝,那個工作! – Gorgsenegger 2011-04-19 08:59:42