2014-05-06 28 views
0

我想要一個正則表達式來驗證以下MAC地址格式。將不同的正則表達式組合成一個來驗證不同的MAC地址格式

  1. 01-23-45-67-89-ab01-23-45-67-89-AB
  2. 01:23:45:67:89:ab01:23:45:67:89:AB
  3. 0123.4567.89ab0123.4567.89AB
  4. abAB

所有上述都是有效的MAC地址格式。

MAC地址應該包含全部大寫字母或來自集合[a-f A-F]的所有英文字母的小寫字母(但不是兩個)。

目前我正在使用6 regex模式,我已經使用or進行驗證,這看起來不太好。

這是我的JavaScript代碼:

var value='01-23-45-67-89-ab'; 
    var regex = new RegExp("^([0-9a-f]{2}){6}$"); 
    var regex1 = new RegExp("^([0-9A-F]{2}){6}$"); 
    var regex2 = new RegExp("^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$"); 
    var regex3 = new RegExp("^([0-9a-f]{2}[:-]){5}([0-9a-f]{2})$"); 
    var regex4 = new RegExp("^([0-9a-f]{4}[\\.]){2}[0-9a-f]{4}$"); 
    var regex5 = new RegExp("^([0-9A-F]{4}[\\.]){2}[0-9A-F]{4}$"); 

    if (regex.test(value) || regex1.test(value)|| regex2.test(value)|| regex3.test(value)|| regex4.test(value)|| regex5.test(value)){ 
      return true; 
     } 
    else{ 
     return false; 
    } 

療法是一種更好的方式將它們全部結合起來,而無需使用or? 我不太擅長regex。 任何幫助,將不勝感激。

+1

險要的混合情況下對用戶提供的值是一個壞主意。只要忽略大小寫差異。 – chrylis

回答

4

是這些正則表達式可以簡化,然後組合成一個正則表達式來匹配所有這些情況。

這是他們結合:

^([0-9A-F]{12}|(?:[0-9A-F]{2}:){5}[0-9A-F]{2}|(?:[0-9A-F]{2}-){5}[0-9A-F]{2}|(?:[0-9A-F]{4}\.){2}[0-9A-F]{4})$ 

Regular expression visualization

注意,您不必重複正則表達式來解釋這兩個大寫和小寫,並且你可以指定"i"作爲第二參數new RegExp()以指定它應該匹配不區分大小寫。

var regex = new RegExp("^([0-9A-F]{12}|(?:[0-9A-F]{2}:){5}[0-9A-F]{2}|(?:[0-9A-F]{2}-){5}[0-9A-F]{2}|(?:[0-9A-F]{4}\.){2}[0-9A-F]{4})$", "i"); 

if(regex.test(value)) 
{ 
    //true 
} 

正如評論這個答案在這裏要求是一個版本,它不允許的情況下混合...

^([0-9A-F]{12}|[0-9a-f]{12}|(?:[0-9A-F]{2}:){5}[0-9A-F]{2}|(?:[0-9a-f]{2}:){5}[0-9a-f]{2}|(?:[0-9A-F]{2}-){5}[0-9A-F]{2}|(?:[0-9a-f]{2}-){5}[0-9a-f]{2}|(?:[0-9A-F]{4}\.){2}[0-9A-F]{4}|(?:[0-9a-f]{4}\.){2}[0-9a-f]{4})$ 
+0

你從哪裏得到圖形? – ooga

+2

圖形可視化來自[Debuggex](https://www.debuggex.com/r/3fOdfwTO7Vt0GU24) – AeroX

+0

根據您的正則表達式,「AB:AB:AB:AB:AB-AB」是正確的。我的mac驗證也不正確,我認爲在我的問題。 – Arvind

2

MAC地址沒有不同的格式,只能以不同的方式呈現。 MAC地址是一個12個字符長的十六進制字符串。

您應該改變方法。而不是接受各種格式,並針對多個正則表達式匹配用戶輸入,轉換用戶輸入並將其與一個正則表達式匹配。

  • 接受用戶輸入
  • 刪除冒號(:)
  • 刪除破折號( - )
  • 刪除空格()
  • 轉換爲大寫
  • 驗證