我有这个正则表达式:/\A\d{8}\z/
如何忽略数字之间的任何空格?
这样123 456 78
和1 2 3 45678
才有效。不只是12345678
我需要验证一个电话号码:123 456 78
或12 12 12 12
答案 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/
答案 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/)