2012-07-20 53 views
0

我有一個正則表達式^[\\p{L}\\d._]*\\p{L}+[\\p{L}\\d._]*$這工作得很好限制_末的正則表達式

  1. ABC123de(字母 - 不論案件)
  2. ABCDEfgh(只有字母 - 不管的情況)
  3. Abc_.123(只允許特殊字符_.

然而,可以接受的輸入像

  1. balaji_,jacob_(具有_在端部)
  2. 2balaji,2jacob(開始用數字)

我們可以修改上述正則表達式來限制上述兩測試用例?

+2

請親自學習正則表達式。你一直在問這個正則表達式太多次了。 – nhahtdh 2012-07-20 10:16:37

+0

[此工具](http://gskinner.com/RegExr/)將幫助您。 – Leri 2012-07-20 10:17:38

+0

請參閱我的答案的最後一句:您需要更好地定義允許的內容。按照定義「'_.'」,「'.1'」和「'_1」「是允許的:這是正確的嗎?建議:正面定義(即允許的內容):長度,開始字符,結束字符和其他(中間)字符。 – Richard 2012-07-20 10:51:07

回答

1

當然,添加適當的限制的開頭和結尾是這樣的:

^\p{L}[\p{L}\d._]*\p{L}+[\p{L}\d._]*[\p{L}\d.]$ 
+1

這將允許任何不在底部的下劃線,所以「A%'」將匹配。您還刪除了以數字,句點或下劃線開頭的功能。 – Richard 2012-07-20 10:19:31

+0

那麼,根據測試,不應該允許從一個數字開始。我只是將測試案例理解爲「必須以字母開頭」。另外,修復結束。 – Keppil 2012-07-20 10:25:59

+0

哎呀,對不起,錯過了,而試圖從這樣一個有限的定義,不包括邊緣案件的邊緣案件。注意到更正。 – Richard 2012-07-20 10:47:03

0

這樣做的第一個peice的:

^[\p{L}\d._]*\p{L}+[\p{L}\d._]*$

具有*允許或更多,首先要解決問題#2更改爲+一個或多個:

^[\p{L}\d._]+\p{L}+[\p{L}\d._]*$. 

爲了防止下劃線在年底需要一個條款不包括_

^[\p{L}\d._]+\p{L}+[\p{L}\d._]*[\p{L}\d.]?$. 

但這仍允許_單獨(從第一部分匹配單獨)。如果你不想要一個唯一的下劃線只是從第一條刪除:

^[\p{L}\d.]+\p{L}+[\p{L}\d._]*[\p{L}\d.]?$. 

如果需要,開始使用下劃線的能力,我認爲我們需要有關允許的情況下的單,雙字符串的更多信息。

+0

根據測試用例2,不允許以數字開頭。 – Keppil 2012-07-20 10:40:34

+0

@Keppil正確。然而,當我意識到「__」的允許性(例如)沒有被涵蓋時,我只是跟最後一句話一起走了。 OP問題的根本原因在於缺乏一個清晰的定義,涵蓋了所允許的全部內容。 – Richard 2012-07-20 10:48:48

+0

感謝您的步驟理查德,抱歉,我不明白我的問題 – balaji 2012-07-20 13:56:24