Удалить первую 1 и пробел перед номером телефона?

Я поискал и понял, что это будет легко найти. Хотя я не нашел ничего, связанного именно с тем, что мне нужно, и подобные вопросы задают люди из-за рубежа, у которых разные форматы телефонов со знаком плюс. Многие записи моих телефонных номеров начинаются с 1 и пробела. Я сделал простую str_replace, затем понял, что если число имеет 1 в середине, за которым следует пробел, то это испортит его.

$string = trim($string);

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

Это работает для телефонных номеров, начинающихся с

1 800-555-1111

1 222-555-1111

Но если номер телефона

1 222 551 1111

Тогда этот 551 и пробел все испортят. Как его можно переписать так, чтобы удалялись только первый 1 и следующий пробел, а остальное оставалось нетронутым? Спасибо.

РЕДАКТИРОВАТЬ

Я забыл упомянуть, что записи не всегда начинаются с 1 и пробела. Иногда они могут быть

888-555-1111

888 555 1111

1 888 555 1111

Может быть, было бы лучше использовать регулярное выражение

ma1234 14.05.2023 04:06

Спасибо, но кто-то может заплатить мне миллион долларов, приставить пистолет к моей голове и дать мне 10 лет, чтобы разобраться с вещами типа regex/preg, и я бы никогда этого не понял. Даже учебники дают только основы и никогда не объясняют сложные части, которые может понять человек.

I_hate_arrays42 14.05.2023 05:19

@I_hate_arrays42 Я обновил ответ, попробуйте

Developer 14.05.2023 06:00

Вы ищете это? ^1\h+regex101.com/r/lTlD8A/1

The fourth bird 14.05.2023 14:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
61
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Кому remove the first 1 and space

substr($string,2)(без использования метода trim()) или substr($string,1)(если вы сначала использовали метод trim()) будут работать, но вы уверены, что ваш номер всегда будет начинаться с 1 и whitespace?

Есть ли у вас какие-либо проверки или условия, чтобы гарантировать, что пользовательский ввод всегда будет начинаться с 1, а затем space?

Если вы уверены в этом, то решение подстроки удаляет первые два, а затем возвращает остальную часть строки.

О, я забыл упомянуть, что это часть проблемы. Он не всегда начинается с 1 и пробела, поэтому я не использовал substr(). Иногда номер может быть 888-555-1111.

I_hate_arrays42 14.05.2023 05:16

Я не думаю, что это была ваша главная проблема, потому что даже принятый вами ответ не касается ситуации, когда кто-то, например, предоставляет такой номер 1800 555 1111. 1 все еще будет там, потому что регулярное выражение ищет 1, за которым следует whitespace: Но я рад, если это сработает для вас.

Relcode 15.05.2023 07:09
Ответ принят как подходящий

Вы можете использовать регулярное выражение для достижения этого: -

$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

Спасибо. Сначала я попробовал ваш код, и он работает.

I_hate_arrays42 14.05.2023 20:51

Вы можете сопоставить 1, за которой следует один (или более) горизонтальный пробельный символ, и утверждать, что за ним следует цифра.

^1\h+(?=\d)

Демонстрация регулярных выражений

Или укажите не менее 10 цифр справа, где между ними может быть необязательный символ, отличный от цифры или новой строки.

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

Демонстрация регулярных выражений } Демонстрация Php

$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;
}

Выход

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

Другие вопросы по теме