まだまだ正規表現勉強中!私のパーセンテージ正規表現(100制限を尊重しない):
^(?<int>[1-9][0-9]*|[0])(?<dec>\.[0-9]+)?\%?$
これにより、次のことが可能になります。
[1-9]
0 以外の数字から始めてください。「004.34」のようなパーセンテージは使用できません。[0-9]*
...0 から 9 までの任意の数字が続く|[0]
または単一の 0 で開始
... このグループを「int」グループとしてキャプチャします。それで:
(?<dec>\.[0-9]+)?
オプションのグループで、0 から 9 までの数字が 1 つ以上続く場合にのみポイントが許可されます。「33」などを入力してほしくありません。
私が正しいと仮定して、以下でテストします:
preg_match('/^(?<int>[1-9][0-9]*|[0])(?<dec>\.[0-9]+)?\%?$/i', '0.32%', $result);
実際には正しいこの結果が得られますが、次のようになります。
Array
(
[0] => 0.32%
[int] => 0
[1] => 0
[dec] => .32
[2] => .32
)
パーセンテージ「%」記号 ( ) をキャプチャしないようにするにはどうすればよい$result[0]
ですか?