2011-06-03 70 views
1

我正在尝试此代码进行值的验证。 (正则表达式从这个site正则表达式货币(欧元)

UPDATE:

现在我有

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

感谢

+0

记得最''€迹象''€国际化 – 2011-06-03 00:52:05

+0

你想支持€前缀,后缀或两者兼而有之? – Phil 2011-06-03 00:52:43

+0

最喜欢的是 – anvd 2011-06-03 00:54:59

回答

2

下面这段代码解决我的问题:

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; 
    } 
} 
0

正则表达式的解决方案是这样的

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

在这里看到网上关于Regexr

但是,如果一个值属于一个范围,而不是使用正则表达式它会检查比较好。您可以轻松提取该值,并在外面检查数字。

+0

谢谢。好的解决方案 – anvd 2011-06-03 13:50:11

0

我的贡献。它效果很好。

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