+
95
-

回答

你提供的正则表达式有一个小问题:小数点前面的数字部分是匹配的,但小数点本身没有被正确转义。此外,你的正则表达式允许以小数点结尾的数字,这在大多数情况下是不符合预期的。

你可以使用以下正则表达式来匹配整数或最多两位小数的数字:

if (preg_match('/^[0-9]+(\.[0-9]{1,2})?$/', $accountPrice)) {
    echo '整数或小数二位的正则';
} else {
    echo '错';
}

这里的 \. 是转义的小数点,表示匹配一个实际的小数点字符。

示例代码
<?php

$testCases = [
    '111',
    '1112.',
    '2324.1',
    '2324.15',
    '2324.157', // wrong
    '0.57'
];

foreach ($testCases as $accountPrice) {
    if (preg_match('/^[0-9]+(\.[0-9]{1,2})?$/', $accountPrice)) {
        echo "$accountPrice: 整数或小数二位的正则\n";
    } else {
        echo "$accountPrice: 错\n";
    }
}
?>
输出结果
111: 整数或小数二位的正则
1112.: 错
2324.1: 整数或小数二位的正则
2324.15: 整数或小数二位的正则
2324.157: 错
0.57: 整数或小数二位的正则
解释^[0-9]+:匹配一个或多个数字,表示整数部分。(\.[0-9]{1,2})?:匹配一个小数点后跟一到两位数字的部分,这部分是可选的(即可以没有小数部分)。$:表示字符串的结束。

通过这个正则表达式,你可以正确匹配整数和最多两位小数的数字。

网友回复

我知道答案,我要回答