javascript - 写了一个验证12.5-20.5的正则老是报错?
typecho
typecho 2017-06-26 10:57:35
[JavaScript讨论组]

要求的数据格式为:
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是咋回事?

typecho
typecho

Following the voice in heart.

全部回复(3)
PHP中文网

/^\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}表示数字重复一次,所以该正则和\d其实是一样的,所以更新后的正则表达式和原先的正则表达式没有区别。

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

曾经蜡笔没有小新
const regex = /^\d+(?:\.\d)?(?:-\d+(?:\.\d)?)?$/;

const cases = [
    "1",
    "10",
    "100",
    "1-5",
    "10-50",
    "100-500",
    "0.5",
    "10.5",
    "10.5-20",
    "10.5-20.5",
    "10-20.5",
    "20.5555",
    "20.5-20.5555"
];

const r = cases.map(s => regex.test(s));
console.log(r);

高洛峰

???为啥要用正则

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号