質問

通貨の値に一致する正規表現を見つけようとしています。

数字と小数点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)?$
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top