Цифры через запятую

Статус
В этой теме нельзя размещать новые ответы.

DupleX

Создатель
Регистрация
20 Апр 2006
Сообщения
26
Реакции
4
Хочу собрать регулярку цифр через запятую.
Например, можно:
37
12,133,255

Нельзя:
пустая строка
,
abc,12
200,
,200

При этом количество цифр и количество элементов любое.

Сделал так:
preg_match('/^[0-9,]+$/', $file[$i]);

Но просто запятая проходит проверку. Что посоветуете?
 
#\d+[0-9,]*\d+#

минимум одна цифра в начале, потом 0 или более цифр и запятых, потом минимум одна цифра в конце.

Пропускает вариант с несколькими запятыми подряд.
 
Хочу собрать регулярку цифр через запятую.
Например, можно:
37
12,133,255
Нельзя:
пустая строка
,
abc,12
200,
,200
При этом количество цифр и количество элементов любое.
Сделал так:
preg_match('/^[0-9,]+$/', $file[$i]);
Но просто запятая проходит проверку. Что посоветуете?
Посоветую задавать вопрос, и как-то обозначать для чего это нужно, поскольку может быть регулярка и не нужна. Вообще регулярка нужна там. где по другому никак. Рискну предположить что цифры разделенные запятыми - это перечень неких идентификаторов, и с информацией, которым они соответствуют необходимо провести некоторое действие. В таком случае просто используй explode(",",$string) потом циклом foreach откинешь каждый несоответствующий. Ведь в такого вида задачах почти всегда оправдвно провести операцию над валидными и просто проигнорировать или вывести в ошибку невалидные идентификаторы.
 
Да не, я думаю это тысячи так отделяются. Можно, конечно, было бы порекомендовать
PHP:
setlocale();
number_format();
money_format();

Но судя по тону, каким был задан вопрос, это все слишком сложно. Надо регулярку :)

Как по мне, намного проще не насиловать юзера, чтоб он вводил все в правильном формате, а самому переводить в число:
PHP:
$str = ',123,456,,78';
$str = preg_replace('#[^0-9]+#','',$str); // уберем левые символы
$val = (int) $str;
 
Посоветую задавать вопрос, и как-то обозначать для чего это нужно, поскольку может быть регулярка и не нужна. Вообще регулярка нужна там. где по другому никак. Рискну предположить что цифры разделенные запятыми - это перечень неких идентификаторов, и с информацией, которым они соответствуют необходимо провести некоторое действие. В таком случае просто используй explode(",",$string) потом циклом foreach откинешь каждый несоответствующий. Ведь в такого вида задачах почти всегда оправдвно провести операцию над валидными и просто проигнорировать или вывести в ошибку невалидные идентификаторы.

Да, я тоже идеального решения регэкспом найти не смог и склонялся к разбивке в массив.

Для меня критично не исправлять. Или всё правильно и подходит, иначе не подходит, так как неизвестно что хотел юзер - я ж не пишу ИИ, который должен думать за юзера.

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

Если всё же кто-то найдёт решение регэкспом, пишите. Уже ради спортивного интереса! Проверю на досуге производительность каждого из решений.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху