2010-05-12 99 views
1

我已完成使用正則表達式的表單的JavaScript驗證,現在正在使用PHP進行冗餘驗證服務器端。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中運行它。任何人都有線索爲什麼會出現這個錯誤?

+0

錯過了$作爲一對夫婦回覆指出下面 \\\ $或使用單引號括起正則表達式,謝謝你們! – Thildemar 2010-05-12 21:46:32

回答

2

你必須雙倍轉義$。

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

只是把\ $將讓PHP從開始一個變量逃避$。您還必須在前面添加另一個轉義的\(\\)。或者你可以使用單引號,這樣PHP不會將$解釋爲變量的開始。

+0

工程很好,我討厭交換語言和忘記所有逃脫的字符=(。謝謝! – Thildemar 2010-05-12 21:42:57

+0

這將無法匹配數字,如2000(將給200) – afilina 2015-07-10 18:40:09

+0

@afilina如果它,那是錯誤的原來的帖子,因爲我剛剛向他們展示瞭如何修復他們的表達以在php中工作。 – 2015-07-10 18:53:19

1

從PHP文件:

不要使用preg_match()如果 只想檢查一個字符串是否包含在另一個字符串 。使用 strpos()strstr()而不是他們的 會更快。

+0

這有什麼關係? OP正在做一個正則表達式匹配,而'preg_ *'函數是你如何做的。 – 2010-05-12 21:32:40

+0

是的,我測試格式不是字符串,或者我會避免像瘟疫一樣的正則表達式。 – Thildemar 2010-05-12 21:44:56

1

試試這個:

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'; 
+0

也是如此,謝謝! – Thildemar 2010-05-12 21:44:10

相關問題