2017-08-17 53 views
1

我已經有這個正則表達式:正則表達式,如果爲3或6位十六進制

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個字符長的十六進制值?提前致謝。

+0

你想匹配整個字符串嗎? '/ ^([0-9A-發F] {3} | [0-9A-發F] {6})$ /'? –

回答

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}規則(因爲它的包含三位十六進制字符串)。