I_hate_arrays42
I_hate_arrays42

Reputation: 23

Remove the first 1 and space before a phone number?

I did searches and figured this would be an easy find. Though I haven't found anything related to exactly what I need and similar questions are from people from overseas that have different phone formats with plus signs. A lot of my phone number entries start with a 1 and a space. I did a simple str_replace then I realized if a number has a 1 in the middle followed by a space, then that would mess it up

$string = trim($string);

$string = str_replace('1 ', '', $string); 

That works for phone numbers beginning with

1 800-555-1111

1 222-555-1111

But in the case the phone number is

1 222 551 1111

Then that 551 and space would mess things up. How can it be rewitten so that only the first 1 and the following space is removed and the rest is untouched? Thanks.

EDIT

I forgot to mention that the entries do not always start with a 1 and a space. Sometimes they may be

888-555-1111

888 555 1111

1 888 555 1111

Upvotes: 1

Views: 325

Answers (3)

The fourth bird
The fourth bird

Reputation: 163362

You could match 1 followed by one (or more) horizontal whitespace characters, and assert that there is a digit following.

^1\h+(?=\d)

Regex demo

Or assert least 10 digits to the right where there can be an optional character other than a digit or a newline in between.

^1\h+(?=\d(?:[^\d\n\r]?\d){9}$)

Regex demo } Php demo

$strings = [
    "1 800-555-1111",
    "1 222-555-1111",
    "888-555-1111",
    "1 888 555 1111",
    "1 ",
    "1 2"
];

$pattern = '/^1\h+(?=\d(?:[^\d\n\r]?\d){9}$)/';

foreach ($strings as $s) {
    echo preg_replace($pattern, '', $s) . PHP_EOL;
}

Output

800-555-1111
222-555-1111
888-555-1111
888 555 1111
1 
1 2

Upvotes: 1

Developer
Developer

Reputation: 1672

You can use regex to achieve this:-

$phone_number = '1 800-555-1111'
echo preg_replace('/^\d\s+/', '', $phone_number);
// Will echo 800-555-1111

$phone_number = '1 800 555 1111'
echo preg_replace('/^\d\s+/', '', $phone_number);
// Will echo 800 555 1111

Upvotes: 0

Relcode
Relcode

Reputation: 521

To remove the first 1 and space

substr($string,2)(without using the trim() method) or substr($string,1)(if you used the trim() method first) will work but are you sure that your number will always start with a 1 and whitespace?

Do you have any checks or conditions added to make sure that the user input will always start with a 1 and followed by a space?

If you are sure about that, then the substring solution removes those first two and then returns the rest of the string.

Upvotes: 0

Related Questions