5

我正在尝试验证 mac 地址。在这种情况下,没有-:例如有效的 mac 将是:

0000000000
00-00-00-00-00-00
00:00:00:00:00:00

但是,当针对以下代码运行时,我总是会出错:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;

namespace parsingxml
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Give me a mac address: ");

            string input = Console.ReadLine();
            input = input.Replace(" ", "").Replace(":","").Replace("-","");

            Regex r = new Regex("^([:xdigit:]){12}$");


            if (r.IsMatch(input))
            {
                Console.Write("Valid Mac");
            }
            else
            {
                Console.Write("Invalid Mac");
            }
            Console.Read();
        }
    }
}

输出:无效的 Mac

4

6 回答 6

10

.NET 正则表达式 不支持 POSIX 字符类。并且即使它确实支持,你也需要将它括起来[]使其生效,即,否则,[[:xdigit:]]它将被视为带有字符的字符类:,,,,,,, 。xdigt

您可能需要这个正则表达式(清除不需要的字符后的 MAC 地址):

^[a-fA-F0-9]{12}$

请注意,通过清理空格-和字符串:,您将允许如下所示的输入通过:

   34:   3-342-9fbc: 6:7

演示

于 2013-05-08T19:21:18.950 回答
5

试试这个正则表达式:

^(?:[0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}|(?:[0-9a-fA-F]{2}-){5}[0-9a-fA-F]{2}|(?:[0-9a-fA-F]{2}){5}[0-9a-fA-F]{2}$

火柴:

  • 12-23-34-45-56-67
  • 12:23:34:45:56:67
  • 122334455667

但不是:

  • 12:34-4556-67

编辑:您的代码对我有用。

在此处输入图像描述

于 2013-05-08T19:24:03.700 回答
1

似乎你可以这样做:

Regex r = new Regex("^([0-9a-fA-F]{2}(?:(?:-[0-9a-fA-F]{2}){5}|(?::[0-9a-fA-F]{2}){5}|[0-9a-fA-F]{10}))$");

或者这个,它更简单,也会更宽容一点:

Regex r = new Regex("^([0-9a-fA-F]{2}(?:[:-]?[0-9a-fA-F]{2}){5})$");
于 2013-05-08T19:23:56.430 回答
0

我自己会使用这样的正则表达式:

Regex rxMacAddress = new Regex( @"^[0-9a-fA-F]{2}(((:[0-9a-fA-F]{2}){5})|((:[0-9a-fA-F]{2}){5}))$") ;

6 对十六进制数字,用冒号或连字符分隔,但不能混合使用。

于 2013-05-08T21:32:59.600 回答
0

你的正则表达式不好。在这里你有一个很好的:

public const string ValidatorInvalidMacAddress = "^([0-9A-Fa-f]{2}[:-]?){5}([0-9A-Fa-f]{2})$";
于 2017-02-16T15:52:36.207 回答
0

正确的正则表达式对我有用,并接受带有 all - 或 all 的 macaddress :分隔符是:- "^[0-9a-fA-F]{2}(((:[0-9a-fA-F]{ 2}){5})|((-[0-9a-fA-F]{2}){5}))$"

于 2020-02-07T05:37:35.560 回答