首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >验证MAC地址onkeyup

验证MAC地址onkeyup
EN

Stack Overflow用户
提问于 2016-09-21 21:25:46
回答 4查看 6.7K关注 0票数 3

我正在尝试验证MAC地址的表单域。

我得到了这个,它是有效的。

代码语言:javascript
运行
复制
$('body').on('keyup', '#macAddess', function(e){
    var e = $(this).val();
    var r = /([a-f0-9]{2})([a-f0-9]{2})/i,
    str = e.replace(/[^a-f0-9]/ig, "");
    while (r.test(str)) {
        str = str.replace(r, '$1' + ':' + '$2');
    }
    e = str.slice(0, 17);
    $(this).val(e)
});

当用户输入时,它会格式化MAC地址,在每对字符后添加:。它只允许a-f和0-9,因此不会添加无效字符。

我想再详述一下..当用户输入MAC地址时,我希望在输入中添加一个类来表明它是错误的,直到输入一个完整格式的MAC地址。

例如:

代码语言:javascript
运行
复制
if (MAC is invalid) $('#' + id).addClass('badMac')

因此,如果用户正在输入值,则仅当输入完整且有效的mac时,才会添加和删除该类。

我想在on('keyup')函数中保留所有内容。

如何测试它是否无效,然后设置类?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-21 21:33:39

您可以使用正则表达式来测试它,该正则表达式检查MAC地址是否有效:

代码语言:javascript
运行
复制
var regexp = /^(([A-Fa-f0-9]{2}[:]){5}[A-Fa-f0-9]{2}[,]?)+$/i;
var mac_address = $(this).val();
if(regexp.test(mac_address)) {
    //valid!
} else {
    //invalid!
}

请注意,如果您在keyup事件上写入此内容,则在用户写入完整的有效MAC地址之前,您将获得无效语句。

编辑

代码段工作:

代码语言:javascript
运行
复制
var regexp = /^(([A-Fa-f0-9]{2}[:]){5}[A-Fa-f0-9]{2}[,]?)+$/i;
var mac_address = "fa:09:91:d5:e4:5a";
if(regexp.test(mac_address)) {
    console.log("Valid: "+ mac_address);
} else {
    console.log("Invalid: "+ mac_address);
}

所以试试这段代码:

代码语言:javascript
运行
复制
$('body').on('keyup', '#macAddess', function(e){
    var e = $(this).val();
    var r = /([a-f0-9]{2})([a-f0-9]{2})/i,
    str = e.replace(/[^a-f0-9]/ig, "");
    while (r.test(str)) {
        str = str.replace(r, '$1' + ':' + '$2');
    }
    e = str.slice(0, 17);
    $(this).val(e);

    var regexp = /^(([A-Fa-f0-9]{2}[:]){5}[A-Fa-f0-9]{2}[,]?)+$/i;
    var mac_address = $(this).val();
    if(regexp.test(mac_address)) {
        //valid!
    } else {
        //invalid!
    }

});
票数 7
EN

Stack Overflow用户

发布于 2016-09-21 21:39:53

代码语言:javascript
运行
复制
function isValidMac(mystring){
  var regex = /^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$/;
  return regex.test(mystring);
  }
  
 $('body').on('keyup', '#macAddress', function(e){
    var e = $(this).val();
    var r = /([a-f0-9]{2})([a-f0-9]{2})/i,
    str = e.replace(/[^a-f0-9]/ig, "");
    while (r.test(str)) {
        str = str.replace(r, '$1' + ':' + '$2');
    }
    e = str.slice(0, 17);
    $(this).val(e)

    $("#macAddress").toggleClass("badMac",!isValidMac(e));
    
});
代码语言:javascript
运行
复制
input.badMac {

  background-color : red; 

}
代码语言:javascript
运行
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input id="macAddress">

票数 3
EN

Stack Overflow用户

发布于 2016-09-21 21:42:08

我建议你使用input事件,它还将处理用户使用Ctrl+CCtrl+V输入MAC地址的用例,以及验证代码应该如下所示:

代码语言:javascript
运行
复制
$(function() {
    var regexp = /^(([A-Fa-f0-9]{2}[:]){5}[A-Fa-f0-9]{2}?)+$/i;

    $("#macAddess").on("input", function(e) {
  	var tb = $(this);
        var val = tb.val().replace(/[^a-f0-9]/ig, "");
        var r = /([a-f0-9]{2})([a-f0-9]{2})/i;
        while (r.test(val)) {
            val = val.replace(r, '$1' + ':' + '$2');
        }
        val = val.slice(0, 17);
        tb.val(val);    
        tb.toggleClass("badMac", !regexp.test(tb.val()));
    });
});
代码语言:javascript
运行
复制
.badMac {
  border: 1px solid red;
}
代码语言:javascript
运行
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="macAddess" />

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39617913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档