2010-10-19 77 views
0

對RegularExpressionValidator控件使用ASP.NET語法時,如何指定兩個連續字符的限制,例如字符'x'?用於限制連續字符的ASP.NET正則表達式

+0

本網站非常適合學習正則表達式,它具有可供您參考的快速參考。花費幾天的時間閱讀本教程,您將能夠自行構建正則表達式,即使在開始時您對它們一無所知:http://www.regular-expressions.info/。 – NightOwl888 2010-10-20 07:22:03

+0

感謝您的RE鏈接。我已經爲它添加了書籤,並計劃更好地學習RE。我的問題是,我很少使用RE,以至於我在使用之間忘記了很多我需要知道的內容。然後有不同的口味可以直接穿過各種語言和工具。 – harrije 2010-10-20 14:12:54

回答

0

你可以提供一個正則表達式如下所示:

(\\w)\\1+ 

(\\w)將匹配任何單詞字符,並\\1+將匹配任何字符與(\\w)匹配。

我沒有此刻進入asp.net,而是採取這種控制檯應用程序爲例:

Console.WriteLine(regex.IsMatch("hello") ? "Not valid" : "Valid"); // Hello contains to consecutive l:s, hence not valid 

Console.WriteLine(regex.IsMatch("Bar") ? "Not valid" : "Valid"); // Bar does not contain any consecutive characters, so it's valid 
+0

我不明白這個答案。我用ValidationExpression =「^([^ x])\\ 1 + $」嘗試了一個RegularExpressionValidator,但它不起作用。 – harrije 2010-10-19 18:42:37

0

Alexn是正確的,這是你連續字符用一個正則表達式,即匹配方式(a)\1匹配aa

但是,我認爲這是一個當你拿着錘子時看起來像釘子一樣的情況。我不會使用正則表達式來驗證此輸入。相反,我建議在代碼中進行驗證(只是循環遍歷字符串,比較str[i]str[i-1],檢查此條件)。

+0

好吧,我知道在後面的代碼中該做什麼......現在想弄清楚如何處理ASP.NET RegularExpressionValidator控件,這是一個精神上的挑戰。我仍然不知道要分配給ValidationExpression。我嘗試了ValidationExpression =「^([^(x)] \ 1)$」和其他各種變化,我仍然沒有一個RE可以消除兩個連續的'x'值。 – harrije 2010-10-20 02:53:22

+0

我明白了。在我看來,從實際的角度來看,這並不值得精神上的挑戰,因爲我相信正則表達式並非真正解決這個問題。 – steinar 2010-10-20 09:15:02

0

這應該工作:

^((?<char>\w)(?!\k<char>))*$ 

它匹配abc,但不abbc

關鍵是要使用所謂的「零寬度負向超前斷言」(語法:(?!subexpression))。

在這裏,我們確保與(?<char>\w)匹配的組本身沒有跟隨(用(?!\k<char>)表示)。

請注意,\w可以替換爲任何有效的字符集(\w不匹配空白字符)。

你也可以不用命名組(注意,引用組有2號):

^((\w)(?!\2))*$ 

及其重要的開始與^$結束整個文本相匹配。

如果您只想排除與連續x字符的文本,你可以使用這個

^((?<char>x)(?!\k<char>)|[^x\W])*$ 

或不反向引用

^(x(?!x)|[^x\W])*$ 

.NET Framework正則表達式的所有語法元素解釋here

0

你可以使用正則表達式來驗證什麼是錯的,以及什麼是正確的。正則表達式(.)\1將匹配任何兩個連續的字符,所以你可以拒絕任何給出IsValid結果的輸入。如果這是您需要的唯一驗證,那麼我認爲這種方式比試圖用正則表達式驗證正確的輸入要容易得多。