正则表达式,用于检查数字是3还是6位十六进制

时间:2017-08-17 10:51:32

标签: javascript regex

我已经有了这个正则表达式:

function check(){
    var re = /[0-9A-Fa-f]{6}/g;
    var inputString = document.getElementById("check").value;

    if(re.test(inputString)) {
         window.alert("Valid hex colour")
    } else {
         window.alert("Invalid hex colour")
    }

    re.lastIndex = 0;
}

这是输入:

<input id="check" maxlength="6" placeholder="------">

这是事件监听器:

document.getElementById('check').onkeydown=function(cc){
            if(cc.keyCode==13){
                check()
            }
            else if(cc.keyCode==46){
                document.getElementById("check").value = "";
            }
        }

这很好用。我也试过这个正则表达式:

/[0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}/g;

但是这也接受长度为3个,4个,5个或6个字符的十六进制值。 如何使用正则表达式检查长度正好为3或正好6个字符的十六进制值?提前谢谢。

1 个答案:

答案 0 :(得分:1)

  

这很好用。我也试过这个正则表达式:

/[0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}/g;
     

但是这也接受长度为3个,4个,5个或6个字符的十六进制值。

您需要锚点(并且没有全局标志):

/^(?:[0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/

您还可以添加i以减少冗长:

/^(?:[0-9A-F]{3}|[0-9A-F]{6})$/i

没有锚点,四位十六进制字符串与{3}规则匹配(因为包含三位十六进制字符串)。