Ruby正则表达式如何忽略数字之间的空格?

时间:2014-04-10 13:13:06

标签: ruby regex

我有这个正则表达式:/\A\d{8}\z/如何忽略数字之间的任何空格?

这样123 456 781 2 3 45678才有效。不只是12345678

我需要验证一个电话号码:123 456 7812 12 12 12

7 个答案:

答案 0 :(得分:3)

我觉得你有点困惑。您在评论中提到了/x修饰符。此修饰符忽略正则表达式

中的空格
/\d \d \d/x

就像

/\d\d\d/

表示它会抓住123不会 1 2 3

此标志用于使正则表达式的编写者能够为其正则表达式添加注释:

/http:\/\/                            # protocol
 \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/ # ip
 \w+\/                                #path
 \w+\.html                            #page
/x

要忽略输入的空格,您需要将\s*添加到表达式中:

 /\A(\s*\d){8}\s*\z/

答案 1 :(得分:1)

这匹配123 456 78和1 2 3 45678

/\A(\d(?:\s?)){8}\z/

http://rubular.com/r/xS48UYyrSW

更多空格123 45678

/\A(\d(?:\s?)+){8}\z/

http://rubular.com/r/i3k8R7yFIK

答案 2 :(得分:1)

我的建议是使用delete这样的方法:

str = '123 456 78'
str.delete(' ').match(/\A\d{8}\z/)
# => #<MatchData "12345678">

但是,如果您只想使用一个正则表达式,则应该执行以下操作,结果与上述解决方案略有不同:

regexp = /\A\s*(?:\d\s*){8}\z/

'123 456 78'.match(regexp)
# => #<MatchData "123 456 78">

'12345678'.match(regexp)
# => #<MatchData "12345678">

' 1 2 3 4 5 6 7 8 '.match(regexp)
# => #<MatchData " 1 2 3 4 5 6 7 8 ">

答案 3 :(得分:0)

在使用正则表达式

之前,Justt使用.gsub(/\s+/, "")删除所有空格

答案 4 :(得分:0)

你可以像这样gsub所有的空白:

"763 236 87".gsub(/\p{Space}/,'')

注意:与\ s不同,\ p {Space}确保匹配任何空格字符。

答案 5 :(得分:0)

尝试使用/\A(\d\s*){7}\d\z/

答案 6 :(得分:0)

即使上述解决方案听起来不错,您也可以尝试:

"123 4 5 678 ".gsub(" ","").match(/\A\d{8}\z/)