ruby - phone-number
This commit is contained in:
parent
0e9c386087
commit
b2c0073bb3
59
ruby/phone-number/README.md
Normal file
59
ruby/phone-number/README.md
Normal file
@ -0,0 +1,59 @@
|
||||
# Phone Number
|
||||
|
||||
Clean up user-entered phone numbers so that they can be sent SMS messages.
|
||||
|
||||
The **North American Numbering Plan (NANP)** is a telephone numbering system used by many countries in North America like the United States, Canada or Bermuda. All NANP-countries share the same international country code: `1`.
|
||||
|
||||
NANP numbers are ten-digit numbers consisting of a three-digit Numbering Plan Area code, commonly known as *area code*, followed by a seven-digit local number. The first three digits of the local number represent the *exchange code*, followed by the unique four-digit number which is the *subscriber number*.
|
||||
|
||||
The format is usually represented as
|
||||
|
||||
```text
|
||||
(NXX)-NXX-XXXX
|
||||
```
|
||||
|
||||
where `N` is any digit from 2 through 9 and `X` is any digit from 0 through 9.
|
||||
|
||||
Your task is to clean up differently formatted telephone numbers by removing punctuation and the country code (1) if present.
|
||||
|
||||
For example, the inputs
|
||||
- `+1 (613)-995-0253`
|
||||
- `613-995-0253`
|
||||
- `1 613 995 0253`
|
||||
- `613.995.0253`
|
||||
|
||||
should all produce the output
|
||||
|
||||
`6139950253`
|
||||
|
||||
**Note:** As this exercise only deals with telephone numbers used in NANP-countries, only 1 is considered a valid country code.
|
||||
|
||||
* * * *
|
||||
|
||||
For installation and learning resources, refer to the
|
||||
[exercism help page](http://exercism.io/languages/ruby).
|
||||
|
||||
For running the tests provided, you will need the Minitest gem. Open a
|
||||
terminal window and run the following command to install minitest:
|
||||
|
||||
gem install minitest
|
||||
|
||||
If you would like color output, you can `require 'minitest/pride'` in
|
||||
the test file, or note the alternative instruction, below, for running
|
||||
the test file.
|
||||
|
||||
Run the tests from the exercise directory using the following command:
|
||||
|
||||
ruby phone_number_test.rb
|
||||
|
||||
To include color from the command line:
|
||||
|
||||
ruby -r minitest/pride phone_number_test.rb
|
||||
|
||||
|
||||
## Source
|
||||
|
||||
Event Manager by JumpstartLab [http://tutorials.jumpstartlab.com/projects/eventmanager.html](http://tutorials.jumpstartlab.com/projects/eventmanager.html)
|
||||
|
||||
## Submitting Incomplete Solutions
|
||||
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
19
ruby/phone-number/phone_number.rb
Normal file
19
ruby/phone-number/phone_number.rb
Normal file
@ -0,0 +1,19 @@
|
||||
class PhoneNumber
|
||||
def self.clean(number)
|
||||
number.gsub!(/[^0-9]/, '')
|
||||
|
||||
if number.length < 10 or number.length > 11
|
||||
nil
|
||||
elsif number.length == 11
|
||||
if number[0] == "1"
|
||||
number.slice(1, number.length)
|
||||
else
|
||||
nil
|
||||
end
|
||||
elsif ["0", "1"].include?(number[0]) or ["0", "1"].include?(number[3])
|
||||
nil
|
||||
else
|
||||
number
|
||||
end
|
||||
end
|
||||
end
|
75
ruby/phone-number/phone_number_test.rb
Normal file
75
ruby/phone-number/phone_number_test.rb
Normal file
@ -0,0 +1,75 @@
|
||||
require 'minitest/autorun'
|
||||
require_relative 'phone_number'
|
||||
|
||||
# Common test data version: 1.4.0 0783171
|
||||
class PhoneNumberTest < Minitest::Test
|
||||
def test_cleans_the_number
|
||||
# skip
|
||||
assert_equal "2234567890", PhoneNumber.clean("(223) 456-7890")
|
||||
end
|
||||
|
||||
def test_cleans_numbers_with_dots
|
||||
# skip
|
||||
assert_equal "2234567890", PhoneNumber.clean("223.456.7890")
|
||||
end
|
||||
|
||||
def test_cleans_numbers_with_multiple_spaces
|
||||
# skip
|
||||
assert_equal "2234567890", PhoneNumber.clean("223 456 7890 ")
|
||||
end
|
||||
|
||||
def test_invalid_when_9_digits
|
||||
# skip
|
||||
assert_nil PhoneNumber.clean("123456789")
|
||||
end
|
||||
|
||||
def test_invalid_when_11_digits_does_not_start_with_a_1
|
||||
# skip
|
||||
assert_nil PhoneNumber.clean("22234567890")
|
||||
end
|
||||
|
||||
def test_valid_when_11_digits_and_starting_with_1
|
||||
# skip
|
||||
assert_equal "2234567890", PhoneNumber.clean("12234567890")
|
||||
end
|
||||
|
||||
def test_valid_when_11_digits_and_starting_with_1_even_with_punctuation
|
||||
# skip
|
||||
assert_equal "2234567890", PhoneNumber.clean("+1 (223) 456-7890")
|
||||
end
|
||||
|
||||
def test_invalid_when_more_than_11_digits
|
||||
# skip
|
||||
assert_nil PhoneNumber.clean("321234567890")
|
||||
end
|
||||
|
||||
def test_invalid_with_letters
|
||||
# skip
|
||||
assert_nil PhoneNumber.clean("123-abc-7890")
|
||||
end
|
||||
|
||||
def test_invalid_with_punctuations
|
||||
# skip
|
||||
assert_nil PhoneNumber.clean("123-@:!-7890")
|
||||
end
|
||||
|
||||
def test_invalid_if_area_code_starts_with_0
|
||||
# skip
|
||||
assert_nil PhoneNumber.clean("(023) 456-7890")
|
||||
end
|
||||
|
||||
def test_invalid_if_area_code_starts_with_1
|
||||
# skip
|
||||
assert_nil PhoneNumber.clean("(123) 456-7890")
|
||||
end
|
||||
|
||||
def test_invalid_if_exchange_code_starts_with_0
|
||||
# skip
|
||||
assert_nil PhoneNumber.clean("(223) 056-7890")
|
||||
end
|
||||
|
||||
def test_invalid_if_exchange_code_starts_with_1
|
||||
# skip
|
||||
assert_nil PhoneNumber.clean("(223) 156-7890")
|
||||
end
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user