gre*_*emo 0 php regex percentage preg-match
还在学习正规表达!我的正则表达式百分比(不遵守100限制):
^(?<int>[1-9][0-9]*|[0])(?<dec>\.[0-9]+)?\%?$
Run Code Online (Sandbox Code Playgroud)
这应该允许:
[1-9] 从不同于0的数字开始.不允许使用"004.34"之类的百分比.[0-9]* ...后跟0到9之间的任何数字|[0] 或者从单个0开始...将此组捕获为"int"组.然后:
(?<dec>\.[0-9]+)? 一个可选组,只有在0到9之间至少有一个数字后才允许一个点.我不希望人们输入即"33".假设我是对的,测试:
preg_match('/^(?<int>[1-9][0-9]*|[0])(?<dec>\.[0-9]+)?\%?$/i', '0.32%', $result);
Run Code Online (Sandbox Code Playgroud)
给我这个结果,这实际上是正确的,但是:
Array
(
[0] => 0.32%
[int] => 0
[1] => 0
[dec] => .32
[2] => .32
)
Run Code Online (Sandbox Code Playgroud)
如何避免捕获百分比"%"符号(in $result[0])?
这真的很简单.只需将正则表达式更改为:
/^(?<int>[1-9][0-9]*|[0])(?<dec>\.[0-9]+)?/
Run Code Online (Sandbox Code Playgroud)
(\%?$从匹配中删除).
如果你想确保%符号存在,但是不想捕获它(在这种情况下似乎无关紧要,但也许)你可以添加一个先行断言.(?=...)断言确保模式存在,但它不会改变匹配的内容.
/^(?<int>[1-9][0-9]*|[0])(?<dec>\.[0-9]+)?(?=%?$)/
Run Code Online (Sandbox Code Playgroud)