Php 正则表达式添加10位数的限制,十进制值没有限制
我想应用一个验证,在这里我需要一个10位数的值限制,但小数点后的值没有限制 像这样Php 正则表达式添加10位数的限制,十进制值没有限制,php,regex,Php,Regex,我想应用一个验证,在这里我需要一个10位数的值限制,但小数点后的值没有限制 像这样 100000000.2121 小数点前的值应小于10位。 我在试这个正则表达式 ^(10 |\d)(\.\d{1,2})$ 但这样,我只添加限制为2的十进制数字。如何实现这一点?如果总数不应超过10,并且数字不能以逗号开头,则您可以声明不能有11个数字,并保持\d+与1个或多个数字匹配 ^(?!(?:[^\d\r\n]*\d){11})\d+(?:\.\d+)?$ 解释 ^字符串的开头 (?!消极前瞻,断言右
100000000.2121
小数点前的值应小于10位。
我在试这个正则表达式
^(10 |\d)(\.\d{1,2})$
但这样,我只添加限制为2的十进制数字。如何实现这一点?如果总数不应超过10,并且数字不能以逗号开头,则您可以声明不能有11个数字,并保持\d+
与1个或多个数字匹配
^(?!(?:[^\d\r\n]*\d){11})\d+(?:\.\d+)?$
解释
字符串的开头^
消极前瞻,断言右边的不是(?!
匹配任何字符的11倍,除了后跟数字的换行符(?:[^\d\r\n]*\d){11}
关闭前瞻)
匹配1+个数字\d+
可以选择匹配一个点和1+个数字(?:\。\d+)
字符串结尾$
以下模式适用于您正在陈述两件事(并且没有显示大量示例):
- “小数点前的值应小于10位”
- “我需要限制值为10位,但小数点后的值没有限制”
^(?:0|[1-9]\d{0,8})(?:\.\d+)?$
看
-开始字符串ancor^
-第一个非捕获组。(?:
-一个0或介于1-9之间的一个数字,然后再加上0到8个数字,使总数保持在10位以下0 |[1-9]\d{0,8}
-关闭第一个非捕获组)
-第二个非捕获组。(?:
-后跟一个或多个数字的文字点\。\d+
-关闭第二个非捕获组)
-将第二个非捕获组设置为可选?
-结束字符串ancor$
{0-9}
更改为{1,9}
如果要求小数点前有0到10位数字,则将{0,9}
更改为{0,10}
代码:()
输出:
array (
0 => '12345678901',
1 => false,
)
array (
0 => '1234567890',
1 => false,
)
array (
0 => '123456789',
1 => true,
)
array (
0 => '1234567890.1',
1 => false,
)
array (
0 => '1234567.8901',
1 => true,
)
array (
0 => '1234.5678901',
1 => true,
)
array (
0 => '1.2345678901',
1 => true,
)
array (
0 => '.12345678901',
1 => true,
)
你试过把它改成
d{1,10}
?JayBlanchard是的,我试过了,但是如果有人在一个小数点后加上超过10个数字呢?这将再次抛出验证。如果(v<9E9)会,则这是一个数字suffice@Naina请提供一组值以及您对每个值的期望评估。您已收到4个答案——所有这些答案对您的需求有不同的解释。这是一个不清楚的问题。请解释一下好吗?您的模式匹配一个11位整数。这违反了所需的逻辑。现在您的答案几乎就是我的答案,除了小数点前允许有10位数字,它将匹配0。
required | numeric | regex:^(?)(?:[^\d\r\n]*\d){11})\d+(?:\.\d+)$”
给出一个错误,说preg\u match():未知修饰符“\\”您能检查一下@thefthbird吗?不是我的dvbtw@mickmackusa我认为OP需要总共匹配10位数字,包括小数部分,因为这行像这样100000000.2121小数点之前的值应该小于10位。
即使这是需要的规则,您的回答错误地评估了我上面评论的模式演示中的几个输入。也许我们应该投票决定是否关闭。OP似乎已经消失了。@JvdV我的假设是总数不应该超过10位。如果不是这样,那么我的答案是错的。根据问题的逻辑,你的答案是不对的。阅读此内容(我想应用一个验证,其中我需要限制值为10位,但小数点后的值没有限制)。
$tests = [
'12345678901',
'1234567890',
'123456789',
'1234567890.1',
'1234567.8901',
'1234.5678901',
'1.2345678901',
'.12345678901',
];
foreach ($tests as $test) {
var_export([$test, (bool)preg_match('~^\d{0,9}(?:\.\d+)?$~', $test)]);
echo "\n";
}
array (
0 => '12345678901',
1 => false,
)
array (
0 => '1234567890',
1 => false,
)
array (
0 => '123456789',
1 => true,
)
array (
0 => '1234567890.1',
1 => false,
)
array (
0 => '1234567.8901',
1 => true,
)
array (
0 => '1234.5678901',
1 => true,
)
array (
0 => '1.2345678901',
1 => true,
)
array (
0 => '.12345678901',
1 => true,
)