2011-06-03 69 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})$");