JavaScript -带十进制值的正则表达式



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

  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条却失败了。我一直盯着最后一组。对我来说,它应该接受小数。显然,它不是。我做错了什么?

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

相关内容

  • 没有找到相关文章

最新更新