1.449,00
1.000.000,55
19,90
etc
etc
我知道我上面列出的是非常可變的,但有貨幣的可能性。我正在尋找一個preg_match()
示例或任何其他函數來處理上面的可能情況。我試着用下面的例子,但它不能正常工作。有沒有機會給我一個最合適的模式呢?preg_match()或類似的功能檢查貨幣
if (! preg_match('/^[0-9.,]$/', $currency)) { echo 'No good.'; }
1.449,00
1.000.000,55
19,90
etc
etc
我知道我上面列出的是非常可變的,但有貨幣的可能性。我正在尋找一個preg_match()
示例或任何其他函數來處理上面的可能情況。我試着用下面的例子,但它不能正常工作。有沒有機會給我一個最合適的模式呢?preg_match()或類似的功能檢查貨幣
if (! preg_match('/^[0-9.,]$/', $currency)) { echo 'No good.'; }
像這樣的東西應該工作:
/^((?:\d{1,3}[,\.]?)+\d*)$/
這符合:
^ - Start of string
( - Capture the following:
(?:
\d{1,3} - One to three digits
[,\.]? - And an optional separator (comma or period)
)+ - One or more times
\d* - Zero or more digits
)
$ - End of string
它通過一切迭代匹配到分離器的左側(如果它存在),然後有\d*
拿起任何可選的部分貨幣。你可以看到它通過all of your tests。
編輯:更新的正則表達式如下:
^((?:\d\.\d{3}\.|\d{1,3}\.)?\d{1,3},\d{1,2})$
我們在哪裏匹配任何一種:
\d\.\d{3}\.
- 一個數字,一個時期,三位,爲期或\d{1,3}\.
- 一位和三位數字,一段時間?
)然後,我們匹配:
\d{1,3},
- 一個三位數和一個逗號,後跟\d{1,2}
- 一位或兩位數字添加+
的]
後允許不僅僅是一個性格比較。
你應該看看[ 'NumberFormatter'](http://www.php.net/manual/en/class.numberformatter.php)。 – Florent 2012-08-07 16:19:35