Поймать переменную строку после предварительно настроенной иглы с помощью strpos()

У меня есть сложная проблема, которую нужно решить. Этот вопрос и ответы уже подтолкнули меня в правильном направлении: strpos">Как найти следующую строку после стрелки с помощью Strpos()

Но моя проблема немного сложнее.

Это контекст:

Пользователи вводят сумму в поле комментария, вводя предопределенный термин («сумма»), за которым следует число. Это свободное поле, поэтому мне нужно учитывать различные способы ввода суммы пользователями. С индикатором валюты, десятичными знаками и т. д. или без них.

Пример:

$commentfield = "2011-7-5 Send bid. Amount: € 3482,- Also included Lease option";

или, другой пример:

$commentfield = "2011-6-5 Bid accepted. Amount: 235. Client requested quick delivery";

Теперь мне нужно извлечь эту сумму, чтобы суметь ее суммировать. Есть ли кто-нибудь, кто может подтолкнуть меня в правильном направлении?

Спасибо!


person Rick    schedule 05.07.2011    source источник
comment
Попытка обрабатывать денежные транзакции на основе текстовых полей произвольной формы обязательно закончится плачевно.   -  person Chris Eberle    schedule 05.07.2011
comment
Вы можете использовать функцию preg_match() в php, предполагая, что число после суммы будет извлекаемым значением.   -  person Mithun Satheesh    schedule 05.07.2011
comment
@mithunsatheesh: проблема в том, что число (которое на самом деле является числом и необязательным маркером валюты) исходит из поля произвольной формы. Так что это может на самом деле просто сказать, что я люблю блины. Также может быть указано 500 биткойнов. Или, может быть, три балла и двенадцать франков. Нет определенной валюты и обязательного формата. Это беспорядок, если не сказать больше.   -  person Chris Eberle    schedule 05.07.2011
comment
@chris извините, я так не думаю .. я просто подумал о возможности извлечь сумму. Я думал, это будет число.   -  person Mithun Satheesh    schedule 05.07.2011
comment
К счастью, я могу гарантировать, что число, указанное за словом «сумма», указано в евро, и что если числа нет, извлекать ничего не нужно. Но я должен согласиться, что это беспорядок;)   -  person Rick    schedule 05.07.2011


Ответы (2)


Похоже на задание для регулярных выражений с использованием функции PHP preg_match. Вам нужно будет получить список всех возможных форматов, которые люди уже используют для сумм.

В будущем вы, возможно, захотите сделать сумму отдельным полем.

person brady.vitrano    schedule 05.07.2011
comment
Вам нужно будет получить список всех возможных форматов, которые люди уже используют для сумм, за исключением того, что в текстовом поле произвольной формы люди могут довольно легко злоупотреблять числами. Например, 30 000 (американское десятичное число, сокращается до 30,00 — допустимо, его можно спутать с европейским разделителем полей, которое составляет 30 000 американских — большая разница) и 25+5 (раздражает, но верно). Гораздо проще (и менее двусмысленно) навязать пользователю форматирование, чтобы не было путаницы в отношении того, что произошло с введенным числом. - person Chris Eberle; 05.07.2011
comment
Я шел в этом направлении, чтобы максимально облегчить жизнь пользователям, но возражения, высказанные Крисом, заставили меня полностью развернуться. Им просто нужно будет заполнить дополнительное поле. Спасибо Крис, Брейди и митунсатиш! - person Rick; 05.07.2011
comment
Упрощение задач для пользователя — это заблуждение, в которое впадают многие разработчики. Существует тенденция думать, что если вы заставите пользователя меньше думать, ему будет легче работать с программным обеспечением. На самом деле все совсем наоборот. Большинству людей нравится структура (и инструкции), потому что они обучены видеть данные так, как их видят компьютеры. Таким образом, увидеть текстовое поле совершенно произвольной формы, в котором указано количество, в основном то же самое, что сказать: ха-ха, что теперь? Лично я знаю, что каждый раз, когда я вижу что-то подобное, уровень моего разочарования повышается, а не снижается. Хорошее решение. - person Chris Eberle; 05.07.2011

Я думаю, это может быть полезно.

$s ="2011-7-5 Send bid. Amount: € 3482,- Also included Lease option";
preg_match('/amount(\s*):(\s*)€(\s*)(?P<price>\d+)/i',$s,$match);
echo $match['price'];
person Mithun Satheesh    schedule 05.07.2011