Validating phone number in ruby

痞子三分冷 提交于 2019-12-19 17:49:08

问题


What are the rules for validating a North American phone number? Also, is there a regex I can use? Is there a gem to do this?

Here are few rules I have in mind

  1. A 10 digit number
  2. no special characters
  3. A positive number

回答1:


There are many gems that will do this for you.

Take a look at: http://rubygems.org/search?utf8=%E2%9C%93&query=phone+number

This one looks like it will do what you need -- it essentially implements a regex to validate the phone number: http://rubygems.org/gems/validates_phone_number

For US, Canada (Bermuda, Bahamas... etc and all +1 numbers) there are other rules that the regex should follow. The first digit (after the +1) must be 2-9.

For a full list see: http://en.wikipedia.org/wiki/North_American_Numbering_Plan




回答2:


Try this

(?:\+?|\b)[0-9]{10}\b

Explanation

@"
(?:         # Match the regular expression below
               # Match either the regular expression below (attempting the next alternative only if this one fails)
      \+          # Match the character “+” literally
         ?           # Between zero and one times, as many times as possible, giving back as needed (greedy)
   |           # Or match regular expression number 2 below (the entire group fails if this one fails to match)
      \b          # Assert position at a word boundary
)
[0-9]       # Match a single character in the range between “0” and “9”
   {10}        # Exactly 10 times
\b          # Assert position at a word boundary
"



回答3:


The rules I used in my perl code for validating NANP phone numbers came from an email sent by Doug Newell to the telnum-l mailing list, which I reproduce below, somewhat simplified to only consider full 10 digit numbers:

The number 10 digits long.  We'll call this pattern:
    ABC DEF XXXX

A may not be 0 or 1.

B may not be 9.

A+B may not be 37 or 96.

B+C may not be 11.

D may not be 0 or 1.

You may be able to extract a regex from libphonenumber's metadata, but beware, it is GNARLY AS HELL.




回答4:


If you want something more advanced than a regex, Twilio has an API that can do this:

Twilio Lookup is a REST API that can:

  • Verify that a phone number exists
  • Format any international phone number into its local standard
  • Determine if a phone number is a cell phone, VOIP or landline
  • Discover information about a phone number’s carrier
  • I haven't used this yet! But it should work, though you do need a (free) Twilio account. (Also I'm not affiliated with Twilio, other than having a free account I'm playing with.)




    回答5:


    I've written a gem here: https://github.com/travisjeffery/validates_phone_number that will do what you want, if you have any questions or issues let me know, please.




    回答6:


    class Phne
    def ad
    puts "Enter your phone number"
    re=gets.chomp
    if re= ~/\b^([0-9]{10})$\b/
    puts "Valid phone number"
    else
    puts "Invalid phone number"
    end
    end
    end
    
    obj=Phne.new
    obj.ad
    


    来源:https://stackoverflow.com/questions/10848748/validating-phone-number-in-ruby

    易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
    该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!