Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式以匹配除小数以外的任何数字和百分比符号_Php_Regex - Fatal编程技术网

Php 正则表达式以匹配除小数以外的任何数字和百分比符号

Php 正则表达式以匹配除小数以外的任何数字和百分比符号,php,regex,Php,Regex,我对RegEx很在行。如果我想检查字符串中除数字0-9、小数点和百分号以外的任何内容,有人能显示要使用的正则表达式吗 我试过这个 if (preg_match('/[^0-9.]+%/i', $string)) { echo 'invalid'; } 但它不能正常工作。我有一个输入字段,询问用户税率应该是多少,这将验证他们是否输入了有效的税率。我希望他们以“5.2%”的形式输入,而不是以小数形式输入,我将在后端进行计算 有效匹配项应为“6%”或“5.2%”等。 无效匹配可能是“2”

我对RegEx很在行。如果我想检查字符串中除数字0-9、小数点和百分号以外的任何内容,有人能显示要使用的正则表达式吗

我试过这个

if (preg_match('/[^0-9.]+%/i',  $string)) {
     echo 'invalid';
}
但它不能正常工作。我有一个输入字段,询问用户税率应该是多少,这将验证他们是否输入了有效的税率。我希望他们以“5.2%”的形式输入,而不是以小数形式输入,我将在后端进行计算

有效匹配项应为“6%”或“5.2%”等。
无效匹配可能是“2”或“0.05”或“A”

您可以匹配有效输入,并反转您的if条件:

if (preg_match('/\b\d*\.?\d+%/',  $string) === FALSE) {
     echo 'invalid';
}

查找有效匹配,然后在测试中反转:

if (!preg_match('/[\d.]%/', $string) {
    echo 'invalid';
}
但是,由于这是为了测试整个字符串,而不仅仅是查找其中的某个百分比,因此您需要锚定它:

if (!preg_match('/^[\d.]+%$/', $string) {
    echo 'invalid';
}

请注意,这将允许类似
%
的操作。您可能应该使用类似的方法来匹配数字部分。

为什么百分比在括号外?为什么是反对票?这不是一个“可接受”的问题吗?如果你只是在测试某个东西的存在,你不需要
+
。一个字符的匹配就足够了。@Barmar-我试过放在括号内,但似乎不起作用。你还没有解释你想要什么,因为这应该可以解决它。谢谢!!!你的帖子很有帮助,但说句公道话,巴尔马的建议也行得通,他比你早了一分钟。谢谢你!当然,你有权标记任何答案,但事实上,我的答案快了5秒:)很抱歉,我没有意识到这一点。我如何看到确切的时间戳?只需将鼠标放在回答下面的“回答…之前”文本上,我现在就看到了…我不知道。以后一定要检查这个谢谢!谢谢-我会尽快接受正确的答案。@anubhava不,这就是为什么我建议用另一个问题的答案替换
[\d.]
,因为它应该是无效的。