0
1.449,00
1.000.000,55
19,90
etc
etc

上にリストしたものは非常に変動しやすいことは知っていますが、通貨の可能性があります。preg_match()上記の可能性のあるケースに対処するための例またはその他の関数を探しています。以下の例で試してみましたが、正しく動作していません。私にそれのための最も適切なパターンを与えられたチャンスはありますか?

if (! preg_match('/^[0-9.,]$/', $currency)) { echo 'No good.'; }
4

2 に答える 2

5

このようなものが動作するはずです:

/^((?:\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*、オプションの通貨の端数を取得する必要があります。

すべてのテストに合格することがわかります。

編集:更新された正規表現は次のようになります。

^((?:\d\.\d{3}\.|\d{1,3}\.)?\d{1,3},\d{1,2})$

次のいずれかに一致する場所:

  • \d\.\d{3}\.- 1 桁、ピリオド、3 桁、ピリオド、OR
  • \d{1,3}\.- 1 桁と 3 桁、ピリオド
  • 上記のいずれでもない (理由により?)

次に、一致します。

  • \d{1,3},- 1 ~ 3 桁の数字とコンマ、その後に続く
  • \d{1,2} - 1 桁または 2 桁
于 2012-08-07T16:23:24.577 に答える
0

+の後に追加し]て、複数の文字を許可します。

于 2012-08-07T16:16:37.577 に答える