Незначительное улучшение по предложению PhiLho:
Вы можете избежать substr , изменив регулярное выражение на:
function FormatWithSlashes($number)
{
return preg_replace('/^0*(\d{3})(\d{3})(\d{3})$/', '$1/$2/$3',
'0000' . $number);
}
Я также удалил ? после каждой из первых двух групп захвата, потому что, когда дано 5, 6 или 7-значное число (как указано в вопросе), это всегда будет иметь по крайней мере 9 цифры для работы. Если вы хотите защититься от возможности получения меньшего входного числа, запустите регулярное выражение для '000000000'. $ number вместо.
В качестве альтернативы, вы можете использовать
substr('0000' . $number, -9, 9);
, а затем склейте косые черты в соответствующих местах с помощью substr_replace , который, я подозреваю, может быть самым быстрым способом сделать это (не нужно запускать регулярные выражения или делить), но на самом деле это просто получение бессмысленная оптимизация, так как любое из представленных решений будет намного быстрее, чем установление сетевого соединения с сервером.