正则表达式添加 10 位数字的限制,十进制值没有限制

我想在需要 10 位数字限制但小数点后的值没有限制的地方应用验证。

像这样 1000000000.2121 小数点前的值应该小于 10 位。我正在尝试这个正则表达式 ^(10|\d)(\.\d{1,2})?$但是通过这个,我只添加了两个限制的十进制数字。我怎样才能做到这一点?


慕盖茨4494581
浏览 206回答 4
4回答

鸿蒙传说

小数点前的值应小于10位此模式允许 0 到 9 位数字,然后可选地允许小数点后跟无限位数字。如果您的要求是小数点前至少有一位数字,则更{0-9}改为{1,9}.如果您的要求是小数点前有零到十位数字,则更{0,9}改为{0,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,)

德玛西亚99

如果总数不应超过 10,并且数字不能以逗号开头,则可以断言不是 11 位,并保留匹配\d+1 位或更多位的数字。^(?!(?:[^\d\r\n]*\d){11})\d+(?:\.\d+)?$解释^字符串的开始(?!Negative lookahead,断言右边的不是(?:[^\d\r\n]*\d){11}匹配任何字符的 11 次,除了换行符后跟一个数字)关闭前瞻。\d+匹配 1 个以上的数字(?:\.\d+)?可选择匹配一个点和 1+ 个数字$字符串结束

素胚勾勒不出你

你在陈述两件事(并没有展示很多可以使用的例子):"小数点前的值应小于10位"“我需要 10 位数字的限制,但小数点后的值没有限制”哪一个?我采用了第一个假设,即不能超过 9 位数字,但必须至少有一个。同样对于数字有效性,我认为只以单个零或根本不从零开始是有意义的:^(?:0|[1-9]\d{0,8})(?:\.\d+)?$^- 开始字符串锚。(?:- 第一个非捕获组。0|[1-9]\d{0,8}- 单个零或1-9 之间的单个数字,后跟零到 8 个数字,以保持在 10 位以下。)- 关闭第一个非捕获组。(?:- 第二非捕获组。\.\d+- 一个文字点后跟一个或多个数字。)- 关闭第二个非捕获组。?- 使第二个非捕获组可选。$- 结束弦锚。注意:如果您允许数字以点开头,这可以简化。

慕娘9325324

以下模式适用于 <= 10 位数字到点之前的值和点之后的任意数量的数字。$b&nbsp;=&nbsp;preg_match("!^\d{1,10}(\.\d*)?$!",109.9);
打开App,查看更多内容
随时随地看视频慕课网APP