Регулярное выражение для валюты (евро)
Я пытаюсь этот код для проверки правильности значения. (регулярное выражение с этого сайта)
ОБНОВИТЬ:
Теперь у меня есть
$value1=250;
$value2=10000;
if (!preg_match("/^(([^0]{1})([0-9])*|(0{1}))(\,\d{2}){0,1}€?$/", $form['salary']) || (!$form['salary'])>$value1."€" && (!$form['salary'])<$value2."€" ){
echo ("invalido");
return false;
}
else
echo ("valido");
return true;
код работает хорошо, но принимается 20€, поэтому проблема сейчас не в регулярном выражении, а в сравнении значений, таких как 200€ или 1000€.
это наверное неправильно
(!$form['salary'])>$value1."€"
Пример некоторых входных значений:
200€
200
200.5
200.50€
limits - 250€ to 10000€
Спасибо
3 ответа
Решение
Этот код ниже решил мою проблему:
if (!preg_match("/^(([^0]{1})([0-9])*|(0{1}))(\,\d{2}){0,1}€?$/", $form['salary'])) {
echo "invalid";
return false;
} else {
$value1 = 400;
$value2 = 10000;
$salary = $form['salary'];
$salary = preg_replace('/[€]/i', '', $salary);
if($salary < $value1 || $salary > $value2) {
echo "bad values";
return false;
} else {
echo "valid";
return true;
}
}
Решение регулярных выражений будет выглядеть так
^(?:10000|(?:(?:(?:2[5-9]\d)|[3-9]\d{2}|\d{4})(?:[,.]\d{2})?))€?$
Смотрите здесь онлайн на Regexr
Но было бы лучше проверить, принадлежит ли значение диапазону, а не использовать регулярное выражение. Вы можете легко извлечь значение и выполнить обычную проверку <> для чисел снаружи.
Мой вклад. Работает отлично.
final Pattern pattern = Pattern.compile("^([0-9]+)|((([1-9][0-9]*)|([0-9]))([.,])[0-9]{1,2})$");