5

MACアドレスを検証しようとしています。この場合、何もない-:、たとえば有効な mac は次のいずれかになります。

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

ただし、以下のコードに対して実行すると、常に false になります。

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 regex は 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 組の 16 進数。セパレータはコロンまたはハイフンのいずれかですが、混合はできません。

于 2013-05-08T21:32:59.600 に答える
0

私のために働いた正規表現を修正し、いずれかの macaddress を受け入れる all - または all : 分離は :- "^[0-9a-fA-F]{2}(((:[0-9a-fA-F]{ 2}){5})|((-[0-9a-fA-F]{2}){5}))$"

于 2020-02-07T05:37:35.560 に答える