Я получил таблицу, чтобы сохранить номер начала счета, который может позволить пользователю определить в любом формате, например:
ABC123
AZ2D20D7S99
но заставит пользователя закончить с номером
я получил таблицу, чтобы сохранить все созданные счета-фактуры с auto_increment
поэтому теперь мне нужно отобразить номер счета-фактуры с помощью
номер счета-фактуры + идентификатор счета-фактуры auto_increment
Например, я выбрал идентификатор счета 11 из db, номер счета-фактуры должен быть
ABC134
AZ2D20D7S110
Я думал, что можно использовать preg_match и preg_replace, но нет стандартного формата для стартового номера, поэтому я думаю, что это невозможно, если нет стандартного формата, верно?
Вы сказали, что вы вынуждаете пользователя заканчиваться номером, так что это какой-то стандартный формат, который вы можете использовать в RegEx.
$regs = array();
$data="AZ2D20D7S110";
preg_match('/(.*?)(\d*\z)/', $data, $regs);
// use $regs[1] for matched number, increment it and append it $regs[0]
При автоинкрементах можно указать префикс в другом столбце и сделать PK комбинированным индексом столбца. Это имеет дополнительное преимущество: вам не нужен код для его обслуживания или запроса и отображения данных: http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
Я бы использовал preg_match
чтобы получить конечный номер, и preg_replace
чтобы заменить его новым номером:
$autoId = 11; /* this is the auto id from the database */
$id = "ABC134"; /* this is the user input */
/* find the trailing number and store it in $number */
preg_match("/[^\d]+(\d+)$/", $id, $matches);
$number = $matches[1];
/* increase the number by the database id */
$newNumber = $number + $autoId;
/* replace the old number with the new number */
echo preg_replace("/\d+$/", $newNumber, $id);
Объяснение шаблона /[^\d]+(\d+)$/
:
[^\d]+
соответствует одному или нескольким десятичным символам(\d+)$
и затем сопоставить один или несколько десятичных символов, которые должны быть в конце строки ($
)$matches[1]
сохраняется совпадающая строка внутри первой скобки