RegEx匹配任何东西,但十进制数字与百分比符号


RegEx to match anything BUT decimal numbers with percent symbol

我的正则表达式很糟糕。任何人都可以显示一个正则表达式使用,如果我想检查一个字符串的任何数字0-9,小数点和百分号?

I've try this…

if (preg_match('/[^0-9.]+%/i',  $string)) {
     echo 'invalid';
}

,但它不能正常工作。我有一个输入字段,询问用户税率应该是多少,这将验证他们输入了有效的税率。我希望他们输入"5.2%"而不是十进制,我将在后端进行计算。

有效匹配将是"6%"或"5.2%"等。无效匹配将是"2"或"0.05"或"A"

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

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

但是由于这应该测试整个字符串,而不仅仅是在其中查找百分比,因此您需要锚定它:

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

注意,这将允许类似.%的东西。您可能应该使用类似正则表达式的东西来匹配文本中带或不带逗号和小数的数字,以匹配数字部分。

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

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

RegEx演示