RegEx匹配任何内容但是十进制数字带有百分号

时间:2016-11-08 17:42:22

标签: php regex

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

我试过这个......

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

但它无法正常工作。我有一个输入字段,询问用户应该是什么税率,这将验证他们已经输入了VALID税率。我希望他们输入它,例如" 5.2%"而不是十进制,我将在后端进行数学计算。

有效的匹配将是" 6%"或" 5.2%"等等 INVALID匹配将是" 2"或" 0.05"或" A"

2 个答案:

答案 0 :(得分:2)

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

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

但是因为这应该测试整个字符串,而不只是在其中的任何地方寻找一个百分比,你需要锚定它:

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

请注意,这将允许.%之类的内容。您可能应该使用类似Regular expression to match numbers with or without commas and decimals in text的内容来匹配数字部分。

答案 1 :(得分:1)

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

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

RegEx Demo