搜索

首页  >  问答  >  正文

javascript - 写了一个验证12.5-20.5的正则老是报错?

要求的数据格式为:
1
10
100
1-5
10-50
100-500
0.5
10.5
10.5-20
10.5-20.5
10-20.5

也就是要求验证的数字大小不限,可以有浮点数可以没有,可以有“-”可以没有,保留一位小数

这是我写的正则表达式:

下面的复制错了:

var a=/^\d{1,}\.?\d?-?(\d{1,})?\.?\d?$/;

更正为:

var a=/^\d{1,}\.?\d{1}?-?(\d{1,})?\.?\d{1}?$/;

但是20.5555一直为true是咋回事?

typechotypecho2716 天前942

全部回复(3)我来回复

  • PHP中文网

    PHP中文网2017-06-26 10:59:35

    /^d{1,}.?d?-?(d{1,})?.?d?$/匹配过程如下:
    首先d{1,}匹配的是"20";
    .?匹配".";
    d?匹配"5",?匹配了1次;
    -?匹配"",因为?匹配0或者1次,在这里匹配0次;
    (d{1,})?匹配"555",此时?匹配1次;
    .?d?匹配"",此时两个?都匹配0次;
    $匹配字符串结尾,所以"20.5555"可以匹配。

    Update1:
    /^d{1,}.?d{1}?-?(d{1,})?.?d{1}?$/的匹配过程如下:

    1. d{1,}匹配"20";

    2. .?匹配".";

    3. d{1}?会首先尝试匹配一个数字,此时匹配"5",?匹配1次;

    4. -?会匹配"",此时?匹配0次;

    5. (d{1,})?匹配"555";

    6. .?匹配"",此时?匹配"",此时?匹配0次;

    7. d{1}?匹配"",?匹配0次;d{1}?匹配"",?匹配0次;
      d{1}表示数字重复一次,所以该正则和dd{1}表示数字重复一次,所以该正则和d其实是一样的,所以更新后的正则表达式和原先的正则表达式没有区别。

    注:一开始写的匹配过程有点儿问题,现在已经更新。

    回复
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-26 10:59:35

    雷雷

    回复
    0
  • 高洛峰

    高洛峰2017-06-26 10:59:35

    ???为啥要用正则

    回复
    0
  • 取消回复