2017-05-05 25 views
1

我有一個正則表達式蟒蛇正則表達式:不允許一個特定的字符重複

^[a-z][a-z0-9\-]{6,10}[a-z0-9]$ 

相匹配的規則如下:在長度

  • 8-12個字符
  • 第一個字符是小寫字母
  • 最後一個字符小寫字母或數字
  • 內部字符可以包含連字符

它重新使用了很多的模塊中,總是一起其他一些規則和正則表達式

,而寫了一些單元測試,我發現它的結合總是用另一個特定的規則。

  • 連字符可以不重複

我不能環繞該規則融入這一個我的頭。我已經嘗試了幾十種用lookbeheads和lookahead的方法,但是在隔離到特定字符並保持長度要求方面沒有運氣。

+1

你可以添加其他的測試,看看它不匹配「 - 」,如: ',而不是用「 - 」 somestring' –

+2

不要試圖在正則表達式中放置太多的邏輯。只需定義一個應用第一個正則表達式的函數,然後檢查雙連字符。 –

+0

這就是目前工作的方式。不幸的是,有人不可避免地調用這個正則表達式而不是組合函數,並且壞數據會通過。我必須做十幾次清理。 –

回答

7

沒有重複連字符^[a-z](?:[a-z0-9]|-(?!-)){6,10}[a-z0-9]$

解釋

^[a-z] 
(?: 
     [a-z0-9] # alnum 
    |    # or 
     - (?! -) # hyphen if not followed by hyphen 
){6,10} 
[a-z0-9] $ 
+0

感謝一噸。我從來沒有想過使用'|'那樣!我一直試圖用'[a-z0-9] + [a-z0-9 \ - ]'來嘗試應用限制。 –

+1

@JonathanVanasco - 沒問題。有時你所要做的就是大聲讀出構造是什麼。對於班級來說,它就像一個_或_ _或_ c。或者是真的改變。所以,你總是可以把它們分解成不同的意思。一旦拆分,可以獨立運作(即合格)。 – sln

相關問題