为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕盖茨4494581 2023-04-23 17:54:40
我想在需要 10 位数字限制但小数点后的值没有限制的地方应用验证。像这样 1000000000.2121 小数点前的值应该小于 10 位。我正在尝试这个正则表达式 ^(10|\d)(\.\d{1,2})?$但是通过这个,我只添加了两个限制的十进制数字。我怎样才能做到这一点?
查看完整描述

4 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

小数点前的值应小于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,

)


查看完整回答
反对 回复 2023-04-23
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

如果总数不应超过 10,并且数字不能以逗号开头,则可以断言不是 11 位,并保留匹配\d+1 位或更多位的数字。

^(?!(?:[^\d\r\n]*\d){11})\d+(?:\.\d+)?$

解释

  • ^字符串的开始

  • (?!Negative lookahead,断言右边的不是

    • (?:[^\d\r\n]*\d){11}匹配任何字符的 11 次,除了换行符后跟一个数字

  • )关闭前瞻。

  • \d+匹配 1 个以上的数字

  • (?:\.\d+)?可选择匹配一个点和 1+ 个数字

  • $字符串结束

查看完整回答
反对 回复 2023-04-23
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

你在陈述两件事(并没有展示很多可以使用的例子):

  • "小数点前的值应小于10位"

  • “我需要 10 位数字的限制,但小数点后的值没有限制”

哪一个?我采用了第一个假设,即不能超过 9 位数字,但必须至少有一个。同样对于数字有效性,我认为只以单个零或根本不从零开始是有意义的:

^(?:0|[1-9]\d{0,8})(?:\.\d+)?$

  • ^- 开始字符串锚。

  • (?:- 第一个非捕获组。

    • 0|[1-9]\d{0,8}- 单个零1-9 之间的单个数字,后跟零到 8 个数字,以保持在 10 位以下。

  • )- 关闭第一个非捕获组。

  • (?:- 第二非捕获组。

    • \.\d+- 一个文字点后跟一个或多个数字。

  • )- 关闭第二个非捕获组。

  • ?- 使第二个非捕获组可选。

  • $- 结束弦锚。

//img1.sycdn.imooc.com/6445008e000188c103210091.jpg

注意:如果您允许数字以点开头,这可以简化。



查看完整回答
反对 回复 2023-04-23
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

以下模式适用于 <= 10 位数字到点之前的值和点之后的任意数量的数字。

$b = preg_match("!^\d{1,10}(\.\d*)?$!",109.9);


查看完整回答
反对 回复 2023-04-23
  • 4 回答
  • 0 关注
  • 202 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信