我正在尝试创建一个正则表达式,验证红/绿/蓝值表达式。我需要正则表达式匹配的表达式包括:
- 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]))?)$