Given a string of a mobile phone number, I need to make sure that the given string only contains digits 0-9
, (
,)
,+
,-
,x
, and space. How can I do it in Ruby?
Asked
Active
Viewed 260 times
0

user513951
- 12,445
- 7
- 65
- 82

Haiyuan Zhang
- 40,802
- 41
- 107
- 134
-
Ruby RegEx syntax is borrowed from Perl. As you know regex in Perl, you can use the same here too. – dheerosaur Dec 15 '10 at 09:23
-
A potential problem is that phone number formats vary around the world. Unless you know the region and you did _NOT_ let users enter them by hand, the input could generate false warnings. See https://stackoverflow.com/q/123559/128421 – the Tin Man Feb 14 '20 at 19:34
-
A much more thorough discussion with examples is https://stackoverflow.com/q/123559/128421 – the Tin Man Feb 14 '20 at 20:09
-
Rather than try to reinvent a wheel use an existing wheel: "[telephone_number](https://github.com/mobi/telephone_number)". – the Tin Man Feb 14 '20 at 20:19
3 Answers
2
Use:
/^[-0-9()+x ]+$/
E.g.:
re = /^[-0-9()+x ]+$/
match = re.match("555-555-5555")

Matthew Flaschen
- 278,309
- 50
- 514
- 539
2
if (/^[-\d()\+x ]+$/.match(variable))
puts "MATCH"
else
puts "Does not MATCH"
end

KARASZI István
- 30,900
- 8
- 101
- 128
1
Use String#count:
"+1 (800) 123-4567".count("^0-9+x()\\- ").zero? # => true
"x invalid string x".count("^0-9+x()\\- ").zero? # => false

user513951
- 12,445
- 7
- 65
- 82