php сумма в долларах регулярное выражение - PullRequest
1 голос
/ 13 мая 2010

Я завершил проверку формы javascript с использованием регулярных выражений и сейчас работаю над избыточной проверкой на стороне сервера с использованием PHP.

Я скопировал это регулярное выражение из моего кода jscript, который находит значения в долларах, и преобразовал его в дружественный PHP-формат:

/\$?((\d{1,3}(,\d{3})*)|(\d+))(\.\d{2})?$/

В частности:

if (preg_match("/\$?((\d{1,3}(,\d{3})*)|(\d+))(\.\d{2})?$/", $_POST["cost"])){}

Хотя выражение отлично работает в JavaScript, я получаю:

Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 1

когда я запускаю его на PHP. Кто-нибудь знает, почему эта ошибка появляется?

Ответы [ 3 ]

2 голосов
/ 13 мая 2010

Вы должны дважды убежать от $.

if (preg_match("/\\\$?((\d{1,3}(,\d{3})*)|(\d+))(\.\d{2})?$/", $_POST["cost"])){}

просто поместив \ $, php избежит запуска переменной $. Вы также должны добавить еще один сбежавший \ (\\) впереди. Или вы можете просто использовать одинарные кавычки, чтобы php не интерпретировал $ как начало переменной.

1 голос
/ 13 мая 2010

Попробуйте это:

if (preg_match('/\$?((\d{1,3}(,\d{3})*)|(\d+))(\.\d{2})?$/', $_POST["cost"])){}

Знак доллара между "рассматривается как начало переменной. Сравните с этими двумя фрагментами кода:

1

$var = "hello";
echo "$var world";

2

$var = "hello";
echo '$var world';
1 голос
/ 13 мая 2010

Из документации PHP:

Не используйте preg_match () , если вы только хочу проверить, если одна строка содержится в другой строке. использование strpos () или strstr () вместо того, как они будет быстрее.

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