2012-08-02 30 views
1

何恰好匹配6或8或10位數字?Regexp,如何精確地

"787876" =~ /^\d{6}$/ -> TRUE 
"78787633" =~ /^\d{8}$/ -> TRUE 
"7878733226" =~ /^\d{10}$/ -> TRUE 
"7878736" =~ /^\d{6}$/ -> FALSE 

何來創建這些情形之一的正則表達式。的 較短的形式:

"787876" =~ /^\d{6}$|^\d{8}$|^\d{10}$/ 
+1

'string =〜/ \ A \ d + \ z/&& [6,8,10] .include?(string.size)' – 2012-08-02 10:53:18

回答

4

使用這個表達式^\d{6}(\d{2}){0,2}$

+0

您能解釋我這個問題嗎? – plewas 2012-08-02 11:06:57

+1

6位數字,後面跟零,一組或兩組數字。 – 2012-08-02 11:48:52

1

另一種解決方案:/^\d{10}|\d{8}|\d{6}$/

1

我能想到的最短的形式是這樣的:

/^(\d\d){3,5}$/ 

這是3至5雙數字。

1

如果你正在處理海量數據,這可能是一個不錯的選擇,因爲它沒有括號來運行子匹配並存儲子結果。

/^\d{2}{3,5}$/ 

恕我直言,有寫一個正則表達式的兩個原則:

  1. 保持它直觀的,當然你也可以發表評論,但更直觀,犯錯誤的機率就越小;
  2. 如果您不想執行子匹配,請儘量避免使用圓括號,因爲子匹配的結果將分組到數組中,這會花費額外的空間。