re = /^(?:(?:\+|00)33[\s.-]{0,3}(?:\(0\)[\s.-]{0,3})?|0)[1-9](?:(?:[\s.-]?\d{2}){4}|\d{2}(?:[\s.-]?\d{3}){2})$/m
str = 'French Phone Number Validation.
Accept several kind of format, more or less usual. And refuse incorrect formats.
- Prefix: 0033 / +33 / (0) / 0
- Number: collapsed / group by 2 / group by 3
- Separator: space / dot / dash
~ Accepted ~
0123456789
01 23 45 67 89
01.23.45.67.89
0123 45.67.89
0033 123-456-789
0033(0)123456789
+33-1.23.45.67.89
+33 - 123 456 789
+33(0) 123 456 789
+33 (0)123 45 67 89
+33 (0)1 2345-6789
+33(0) - 123456789
~ Rejected ~
012345678
01234567890
0+123456789
(0)123456789
01 23 45 67 89
~ Accepted but strange ~
+33.-.123456789
+33.-.(0)-.-123456789
01 23.45-67.89
'
subst = 'false'
result = str.gsub(re, subst)
# Print the result of the substitution
puts result
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html