2011-10-25 80 views
1

同事使用使用正則表達式驗證數據輸入字段的應用程序。非重複字符正則表達式

他需要允許用戶從數字1-9中進行選擇。

即1,2,3,...,12,13,...,23,24,...,...,123456789

明顯的基本[1-9] {1 ,9}不會禁止重複數字或強制執行數字順序。

數字不能重複(不允許11,343等),它們必須按數字順序(不允許21,164等)。

單獨匹配320種可能性的缺點「(1 | 2 | 3 | ... | 12 | 13 | ...)」,我該怎麼做到這一點?

回答

8
^1?2?3?4?5?6?7?8?9?$ 

這一個?

顯然,用戶最多可以插入9位數字(123456789),他可以從任何一個開始。任何數字都是可選的,但訂單是固定的。

如果你想有一個數字是必要的,使用前瞻

^(?=[1-9])1?2?3?4?5?6?7?8?9?$ 

或向後看

^1?2?3?4?5?6?7?8?9?(?<=[1-9])$ 

或提前

^(?!$)1?2?3?4?5?6?7?8?9?$ 

或後面

負外觀負的樣子
^1?2?3?4?5?6?7?8?9?(?<!^)$ 

所以至少一個數字是必要

如果您正則表達式語言沒有看aheads(看看屁股),你可以這樣做:

^12?3?4?5?6?7?8?9?|23?4?5?6?7?8?9?|34?5?6?7?8?9?|45?6?7?8?9?|56?7?8?9?|67?8?9?|78?9?|89?|9)$ 

現在,第一個數字「分支」的以下可選數字的「有效」組合。

+0

這不是太簡陋,除非它匹配'「」':-)這可以通過'length> 0'約束來解決。 – paxdiablo

+0

@paxdiablo我已經添加變種 – xanatos

+0

+1很好和短的解決方案! – hochl