Я поискал и понял, что это будет легко найти. Хотя я не нашел ничего, связанного именно с тем, что мне нужно, и подобные вопросы задают люди из-за рубежа, у которых разные форматы телефонов со знаком плюс. Многие записи моих телефонных номеров начинаются с 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
Спасибо, но кто-то может заплатить мне миллион долларов, приставить пистолет к моей голове и дать мне 10 лет, чтобы разобраться с вещами типа regex/preg, и я бы никогда этого не понял. Даже учебники дают только основы и никогда не объясняют сложные части, которые может понять человек.
@I_hate_arrays42 Я обновил ответ, попробуйте
Вы ищете это? ^1\h+regex101.com/r/lTlD8A/1






Кому remove the first 1 and space
substr($string,2)(без использования метода trim()) или substr($string,1)(если вы сначала использовали метод trim()) будут работать, но вы уверены, что ваш номер всегда будет начинаться с 1 и whitespace?
Есть ли у вас какие-либо проверки или условия, чтобы гарантировать, что пользовательский ввод всегда будет начинаться с 1, а затем space?
Если вы уверены в этом, то решение подстроки удаляет первые два, а затем возвращает остальную часть строки.
О, я забыл упомянуть, что это часть проблемы. Он не всегда начинается с 1 и пробела, поэтому я не использовал substr(). Иногда номер может быть 888-555-1111.
Я не думаю, что это была ваша главная проблема, потому что даже принятый вами ответ не касается ситуации, когда кто-то, например, предоставляет такой номер 1800 555 1111. 1 все еще будет там, потому что регулярное выражение ищет 1, за которым следует whitespace: Но я рад, если это сработает для вас.
Вы можете использовать регулярное выражение для достижения этого: -
$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
Спасибо. Сначала я попробовал ваш код, и он работает.
Вы можете сопоставить 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
Может быть, было бы лучше использовать регулярное выражение