【问题标题】:JavaScript - Regex with decimal values [duplicate]JavaScript - 带有十进制值的正则表达式 [重复]
【发布时间】:2021-12-14 16:30:51
【问题描述】:

我正在尝试创建一个验证红色/绿色/蓝色值表达式的正则表达式。我需要正则表达式匹配的表达式包括:

  1. RGB(1,10,100)
  2. rgb(100, 10, 1)
  3. RGB(1,2,3)
  4. rgba(1, 2, 3, .75)
  5. rgba(1, 2, 3, 0.75)
  6. rgba(1, 2, 3, 0)
  7. rgba(1, 2, 3, 1)

目前,我有以下正则表达式:

^rgba?\((([+-]?\d+(\.\d+)?),\s*){2}[+-]?\d+(\.\d+)?(,\s*(0?\.\d|[01]))?\)$

此表达式适用于 #1、#2、#3、#6 和 #7。但是,#4 和#5 失败。我一直盯着最后一组。对我来说,它看起来应该接受小数。显然,它不是。我做错了什么?

【问题讨论】:

标签: javascript regex


【解决方案1】:

您的正则表达式中的问题是,您的表达式不允许最后一个小数点后面的长度大于 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]))?\)$

【讨论】:

    猜你喜欢
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多