Вставка дефиса между временными строками в списке - PullRequest
1 голос
/ 20 февраля 2011

Мне нужна помощь с функцией форматирования.Мне нужно иметь возможность принять входные данные (аргумент функции) и отформатировать строку во что-то еще.Вот мои варианты:

7am7pm
10am10pm
OFF

Итак, в зависимости от того, что выбрано, я хочу, чтобы регулярное выражение удовлетворяло следующим критериям вывода:

7am-7pm
10am-10pm
OFF

Другими словами, мне нужно вставить дефисмежду временем и оригиналом может быть либо [0-9]{2}, либо [0-9]{1}, поэтому я предполагаю что-то вроде [0-9]{1,2}, но я не уверен, как создать функцию и использовать ее в PHP.

Ответы [ 4 ]

3 голосов
/ 20 февраля 2011

Вот версия, использующая утверждений , поэтому она должна вводить только один символ:

return preg_replace('/(?<=[a-z])(?=\d)/', "-", $arg);

Она ищет только позицию в строке, где предшествует буква ?<= иследует номер ?=.

3 голосов
/ 20 февраля 2011

Попробуйте

preg_replace("/(\d{1,2}(am|pm))(\d{1,2}(am|pm))/", "$1-$3", $string);

Демо: http://codepad.org/BBwW4eEE

1 голос
/ 20 февраля 2011

Это должно обрабатывать время для вас (и вы будете управлять "OFF" с помощью простого оператора if):

$output = preg_replace('/^([0-9]{1,2}(am|pm))-?([0-9]{1,2}(am|pm))$/i', '$1-$3', $input);
0 голосов
/ 20 февраля 2011

Как насчет этого:

function format_date($date)
{
if( $date == 'off' ) return 'off';
return preg_replace( '/^(\d{1,2}\w{2})(\d{1,2}\w{2})$/' , '${1}-${2}' , $date );
}

Я предполагаю, что вы говорите, что ввод будет выглядеть как первое поле и должен быть отформатирован как второе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...