通貨の値に一致する正規表現を見つけようとしています。
数字と小数点以下1桁のみを一致させたい
許可された
- 10
- 100
- 100.00
禁止されている
- アルファ文字
- 100,00
- +/- 100
私は検索を行い、運がなくてもかなりの数を試しました。
アドバイスいただければ幸いです
if (preg_match('/^[0-9]+(?:\.[0-9]+)?$/', $subject))
{
# Successful match
}
else
{
# Match attempt failed
}
補足: 必要な小数点以下の桁数を制限したい場合は、次のようにすることができます:
/^[0-9]+(?:\.[0-9]{1,3})?$/im
そう
100.000
一致しますが、
100.0001
しません。
さらにヘルプが必要な場合は、コメントを投稿してください。
PS可能であれば、上記の数値フォーマッタを使用してください。ネイティブ関数は常に優れています (そして高速です)。それ以外の場合は、このソリューションが役に立ちます。
これはどう
if (preg_match('/^\d+(\.\d{2})?$/', $subject))
{
// correct currency format
} else {
//invalid currency format
}
正規表現を使用する他の方法を検討することをお勧めします。
たとえば、NumberFormatter
柔軟な数値と通貨の解析と書式設定を提供するクラスがあり、国際化サポートが組み込まれています。
これは PHP 5.3 以降に組み込まれており、以前のバージョンの PHP 5 では拡張機能として利用できます。
この正規表現を試してください:
^(?:[1-9]\d+|\d)(?:\.\d\d)?$