2012-08-02 55 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. 如果您不想执行子匹配,请尽量避免使用圆括号,因为子匹配的结果将分组到数组中,这会花费额外的空间。