1

i am trying this code for make a validation for a value. (regex from this site)

UPDATE:

Now i have

$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;

the code works well, but 20€ is accepted, so the problem now is not the regex, but compare values like 200€ or 1000€.

this probably is wrong

(!$form['salary'])>$value1."€"

example some Input values:

    200€
    200
    200.5
    200.50€

limits - 250€ to 10000€

thanks

anvd
  • 3,997
  • 19
  • 65
  • 126
  • remember most `€` signs are `€` for internationalization – Lawrence Cherone Jun 03 '11 at 00:52
  • Do you want to support a € prefix, suffix or both? – Phil Jun 03 '11 at 00:52
  • @Fel That complicates things immensely as I'd imagine you'd want to match a prefix or suffix but *not* both – Phil Jun 03 '11 at 01:24
  • at the moment i have this: /^(([^0]{1})([0-9])*|(0{1}))(\,\d{2}){0,1}€?$/ -- only woks with suffix, but ok, the main problem now is the interval of values – anvd Jun 03 '11 at 01:30
  • Does this problem have to be solved with (a) a regular expression and (b) just one regular expression? – johnsyweb Jun 03 '11 at 02:19
  • is indifferent. the important thing is to work. As i said, at the moment the only problem is the interval of values. thanks – anvd Jun 03 '11 at 02:22

3 Answers3

3

This code below solved my problem:

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;
    }
}
Zim84
  • 3,404
  • 2
  • 35
  • 40
anvd
  • 3,997
  • 19
  • 65
  • 126
1

The regex solution would look like this

^(?:10000|(?:(?:(?:2[5-9]\d)|[3-9]\d{2}|\d{4})(?:[,.]\d{2})?))€?$

See here online on Regexr

But it would be better for checking if a value belongs to a range, not to use a regex. You can extract the value easily and do a normal <> check on numbers outside.

stema
  • 90,351
  • 20
  • 107
  • 135
0

My contribution. It works great.

final Pattern pattern = Pattern.compile("^([0-9]+)|((([1-9][0-9]*)|([0-9]))([.,])[0-9]{1,2})$");
user1237981
  • 165
  • 1
  • 8