javascript - JavaScript - 带有十进制值的正则表达式
问题描述
我正在尝试创建一个验证红色/绿色/蓝色值表达式的正则表达式。我需要正则表达式匹配的表达式包括:
- RGB(1, 10, 100)
- RGB(100, 10, 1)
- RGB(1,2,3)
- RGBA(1, 2, 3, .75)
- rgba(1, 2, 3, 0.75)
- RGBA(1, 2, 3, 0)
- RGBA(1, 2, 3, 1)
目前,我有以下正则表达式:
^rgba?\((([+-]?\d+(\.\d+)?),\s*){2}[+-]?\d+(\.\d+)?(,\s*(0?\.\d|[01]))?\)$
此表达式适用于#1、#2、#3、#6 和#7。但是,#4 和#5 失败。我一直盯着最后一组。对我来说,它看起来应该接受小数。显然,它不是。我究竟做错了什么?
解决方案
正则表达式中的问题是,您的表达式不允许最后一个小数点后面的长度大于 1 的值。考虑到原来的正则表达式:
^rgba?\((([+-]?\d+(\.\d+)?),\s*){2}[+-]?\d+(\.\d+)?(,\s*(0?\.\d|[01]))?\)$
你会得到 rgba(1, 2, 35.132, 0.7) 的正值,但 rgba(1, 2, 35.132, 0.75) 的负值。
解决方案是在最后一个 \d 数字表示符上添加一个星号,表示可以有任意数量的数字。加号会更好,因为它会检测到小数点后有 0 位的错误值,需要至少 1 个 \d 实例。
^rgba?\((([+-]?\d+(\.\d+)?),\s*){2}[+-]?\d+(\.\d+)?(,\s*(0?\.\d*|[01]))?\)$
推荐阅读
- javascript - 获取与内部标签匹配的文本
- java - Tomcat 关闭时的 Http 请求被阻止 - 如何更改它
- c# - .NET Singleton 长时间运行的秒表实例
- openmdao - 声明冗余输出有问题吗?
- algorithm - 具有函数 nlogn 的主定理
- r - 如何在提取过程中使用特定值填充空单元格?
- spring - 在 Spring Data JPA 中连接多个表
- javascript - 在 D3 Donut Chart 中为总计添加更细的弧
- r - 如何找到第 i 个索引的向量是直到索引 i 的另一个向量的平均值
- amazon-web-services - AWS - 失败的主实例在恢复后发生了什么