ম্যাক ঠিকানার জন্য নিয়মিত প্রকাশ কী?


125

এই বিন্যাসে:

3D:F2:C9:A6:B3:4F

বা:

3D-F2-C9-A6-B3-4F

উত্তর:


266

মানব-বান্ধব আকারে ম্যাক -48 ঠিকানা মুদ্রণের জন্য স্ট্যান্ডার্ড (আইইইই 802) ফর্ম্যাটটি দুটি হেক্সাডেসিমাল ডিজিটের ছয়টি গ্রুপ, হাইফেন -বা কলোন দ্বারা পৃথক :

তাই:

^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$

21
মনে রাখবেন যে যদি এগুলি লোয়ার কেস হেক্সাডেসিমাল অক্ষর সহ সঞ্চিত থাকে তবে এটি উভয় কেস ধরার জন্য গ্রুপটিকে [0-9A-Fa-f] এ পরিবর্তন করতে মিলবে না
স্কট চেম্বারলাইন

5
আপনি সম্ভবত কেসিং উপেক্ষা করতে চান
ডায়েটবুদ্ধ

5
^ ([0-9A-Fa-f] {2} [: -]) {5} ([0-9A-Fa-f] {2}) $
রাজাভেল ডি

2
একদিকে যেমন "স্ট্যান্ডার্ড ফর্ম্যাট" সম্পর্কিত উপরের উক্তিটি উইকিপিডিয়া থেকে এসেছে, ৮০২.৩ মানের বডি নয়। আইইইই 802-2014 আসলে নির্দিষ্ট করে হাইফেন সাধারণ ম্যাক ঠিকানা (§ 8.1 ¶ 3) এবং জন্য কোলন লুপ্তপ্রায় বিট-বিপরীত নোটেশন (¶ 4) জন্য। গুরুত্বপূর্ণভাবে, বাস্তবে , কেউ এটি পর্যবেক্ষণ করে না । আমরা কেবল একটি বা অন্যটি ব্যবহার করি তবে এগুলিকে কখনও একটি লিখিত ম্যাকের সাথে মিশ্রিত করি না।
পাইলক্রো

1
আমি মনে করি না যে এই রেগেক্স সঠিক হিসাবে এটি '3 ডি-এফ 2-সি 9: এ 6-বি 3: 4 এফ' কে বৈধ ম্যাক ঠিকানা হিসাবে শ্রেণিবদ্ধ করেছে, যদিও এটি সঠিক নয়। সঠিকটি হ'ল: ((([a-zA-z0-9] {2} [-:]) {5} ([a-zA-z0-9] {2}))) (([a-- zA-z0-9] {2}:) {5} ([a-zA-z0-9] {2}))) যাতে প্রতিবার আপনি পুরো ম্যাক ঠিকানার জন্য ':' বা '-' চয়ন করতে পারেন।
পাইফক্স

23

চোখের দিকে একটু শক্ত, তবে এটি:

/^(?:[[:xdigit:]]{2}([-:]))(?:[[:xdigit:]]{2}\1){4}[[:xdigit:]]{2}$/

আপনার ম্যাক স্বরলিপিটির জন্য সমস্ত কলোন বা সমস্ত ড্যাশ প্রয়োগ করবে।

(একটি সহজ রেজেক্স পদ্ধতির অনুমতি দেওয়া যেতে পারে A1:B2-C3:D4-E5:F6, উদাহরণস্বরূপ, যা উপরেরটি প্রত্যাখ্যান করে))


এটি কাজ করে, তবে আপনি কী ব্যাখ্যা করতে পারবেন: এক্সডিজিট কী? এবং আমি লক্ষ্য করেছি যে আপনি দলটিকে ([-:]) দৈর্ঘ্যের পরে রেখেছেন, তাতে সমস্ত কলোন বা হাইফেন লাগে কি?
জাইসফট

2
@ সাইসফট, :xdigit:হেক্স ডিজিটের জন্য সংক্ষিপ্ত, আরও কম-বেশি বলার অন্য একটি উপায় [a-fA-F0-9]\1প্রথম ড্যাশ বা কোলন জন্য ক্যাপচার গোষ্ঠীর উল্লেখ করে ([-:]), এবং শুধুমাত্র মেলায় প্রথমবার কি মিলেছে।
পাইলক্রো

2
ক্যাপচারিং এবং নন-ক্যাপচারিং গ্রুপ উভয়ই যথাযথভাবে ব্যবহার করার জন্য, এবং ব্যবহারের জন্যও +1 :xdigit:(যদিও "শর্টহ্যান্ড" কেবলমাত্র ছোট [a-fA-F0-9]এবং সমতুল্য /[a-f0-9]/iহ'ল!)
gb96

@ পিলক্রো আপনি দয়া করে ব্যাখ্যা করতে পারেন কেন এই ম্যাক: C8:FD:19:55:E6:3Aব্যর্থ হয়? এটি একটি আসল ম্যাক ঠিকানা। আমি তোমার Regex পরিবর্তিত গ্রহণ করতে :শুধুমাত্র /^(?:[[:xdigit:]]{2}([:]))(?:[[:xdigit:]]{2}\1){4}[[:xdigit:]]{2}$/ধন্যবাদ!
স্যাম

1
আমার মতে এটি আরও ভাল উত্তর কারণ এটি আসলে ":" এবং "-" এর মিশ্র ব্যবহার পরীক্ষা করে।
রায় Oei

9

এই রেজেক্সের সাথে সিসকো ফর্ম্যাট সহ প্রতিটি ম্যাক ফর্ম্যাট মিলবে 0102-0304-abcd

^([[:xdigit:]]{2}[:.-]?){5}[[:xdigit:]]{2}$

এটি মেলে তারের উদাহরণ:

01:02:03:04:ab:cd
01-02-03-04-ab-cd
01.02.03.04.ab.cd
0102-0304-abcd
01020304abcd

মিশ্র ফর্ম্যাটও মিলবে!


এটি প্রথম পাঁচটি অক্টেটের যেকোনটির পরে বিভাজকের সাথে মিলবে, অর্থাত্ এটি গ্রহণ করবে aa.aa.bbbb.cccc, উদাহরণস্বরূপ।
পাইলক্রো

1
#notAllFormats আপনি Wi-Fi সঙ্গে একটি OSX সিস্টেমে অ্যাক্সেস, চালনা করে থাকেন তাহলে /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -Iযদি থাকে অক্টেট হয়, BSSID লাইন জন্য, এবং বর্ণন 0x10 অধীনে শূন্য অবনমিত হয়েছে ( %xবা %2xবদলে %02x printfবিন্যাস ব্যবহৃত?)
nhed

8

ডিলিমিটার: " : ", " - ", " "

ডাবল বা একক: 00 = 0, 0f = f

/^([0-9a-f]{1,2}[\.:-]){5}([0-9a-f]{1,2})$/i

অথবা

/^([0-9a-F]{1,2}[\.:-]){5}([0-9a-F]{1,2})$/


exm: 00:27:0e:2a:b9:aa, 00-27-0E-2A-B9-AA, 0.27.e.2a.b9.aa ...

2
দ্বিতীয়টি ভুলভাবে স্ট্রিংগুলি মেলে যাতে জি-এর মতো নন-হেক্স অক্ষর রয়েছে।
বাইনারি ফাইল

দ্বিতীয়টিটি বেশিরভাগ স্বাদে বৈধ নয়, বিআরই / ইআরই ব্যতীত, যা চরিত্রের সীমাবদ্ধতা সমর্থন করে। যাইহোক, অক্ষর পরিসীমা জোটের জন্য সমর্থন বাস্তবায়নের মধ্যে পৃথক, তাই ফলাফল পৃথক হতে পারে।
নাহধঃ

আরেকটি বিষয় হ'ল এই গোষ্ঠীগুলির অবশ্যই 2 টি হেক্সা-অঙ্ক থাকতে হবে।
nhahtdh

তাত্ত্বিকভাবে বন্যের প্রোগ্রামগুলির দ্বারা সমস্ত ম্যাক ঠিকানাগুলি প্রতিটি পৃথক গোষ্ঠীতে 2 হেক্স অঙ্কের মতো কিছু মান অনুসরণ করবে। যাইহোক, কিছু অ-মানকযুক্ত ইউনিক্স রূপগুলি একটি নেতৃস্থানীয় শূন্য থাকে যখন আউটপুট সংক্ষিপ্ত করে, কিছু ক্ষেত্রে কেবল 1 হেক্স চর ছেড়ে যায়। অত: পর প্রয়োজনীয়তার {1,2}Regex
TrinitronX

যাইহোক, সেট করা চরিত্রটি [0-9a-F]সম্ভবত [0-9a-fA-F]
এটির

5

সতর্কতা অবলম্বন করুন যে ইউনিকোডের সম্পত্তিতে \p{xdigit}সম্পূর্ণরূপে সংস্করণ রয়েছে। \p{ASCII_Hex_Digit}পরিবর্তে আপনি পছন্দ করতে পারেন।

জিজ্ঞাসা করা প্রশ্নের উত্তরটির উত্তম উত্তম উত্তর দেওয়া যেতে পারে - তবে শপথ করে আপনার যদি একটি নির্দিষ্ট ভেন্য্য সিপিএএন মডিউল ইনস্টল থাকে -

% perl -MRegexp::Common -lE 'say $RE{net}{MAC}'

আমি এখানে ভাগ্যবান প্যাটার্ন নম্বর হিসাবে প্রকাশিত নির্দিষ্ট প্যাটার্নটি দেখি ; আরও অনেক আছে।

এই প্রোগ্রাম:

#!/usr/bin/env perl
use 5.010;
use strict;
use warnings qw<FATAL all>;

my $mac_rx = qr{
    ^ (?&MAC_addr) $
    (?(DEFINE)
        (?<MAC_addr>
                (?&pair) (?<it>  (?&either) )
            (?: (?&pair) \k<it> ) {4}
                (?&pair)
        )
        (?<pair>    [0-9a-f] {2} )
        (?<either>  [:\-]        )
    )
}xi;

while (<DATA>) {
    chomp;
    printf("%-25s %s\n", $_ => /$mac_rx/ ? "ok" : "not ok");
}

__END__
3D:F2:C9:A6:B3:4F
3D:F2:AC9:A6:B3:4F
3D:F2:C9:A6:B3:4F:00
:F2:C9:A6:B3:4F
F2:C9:A6:B3:4F
3d:f2:c9:a6:b3:4f
3D-F2-C9-A6-B3-4F
3D-F2:C9-A6:B3-4F

এই আউটপুট উত্পন্ন:

3D:F2:C9:A6:B3:4F         ok
3D:F2:AC9:A6:B3:4F        not ok
3D:F2:C9:A6:B3:4F:00      not ok
:F2:C9:A6:B3:4F           not ok
F2:C9:A6:B3:4F            not ok
3d:f2:c9:a6:b3:4f         ok
3D-F2-C9-A6-B3-4F         ok
3D-F2:C9-A6:B3-4F         not ok

যা আপনি যে ধরণের জিনিস খুঁজছেন তা মনে হচ্ছে।



4

এই প্রশ্নটি দেখুন ।

নিম্নরূপ হিসাবে রেজেক্সেস:

^[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}$

^[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}$

1
গ্রুপ করে এটি ছোট করার কোনও উপায় নেই? এবং আমি কীভাবে একটি রেগেক্সকে একত্রিত করতে পারি: হয় একটি: বা একটি - 2 পৃথক নিয়মিত এক্সপ্রেশন না রেখে?
জাইসফট

নেটকোডার সংক্ষিপ্ত রূপটিও কাজ করবে। একটি বা অন্যটি ব্যবহার করা আপনার ম্যাকের কোনও ঠিকানা ক্যাপচার করতে হবে বা এটি পুরোপুরি বৈধ করে তোলা উচিত কিনা তার উপর ভিত্তি করে।
জেলটন

এটি সামগ্রিকভাবে বৈধ হওয়া দরকার, সুতরাং এতে যদি হয় সমস্ত হাইফেন বা সমস্ত কলন থাকে। যদি এতে একটি মিশ্রণ থাকে তবে এটি বৈধ ম্যাক নয়।
জাইসফট

2
@ সাইফসফ্ট: যেমন আমি আমার উত্তরের মন্তব্যে বলেছি, স্পেসিফিকেশন অনুসারে কোলন এবং হাইফেনের মিশ্রণ বৈধ।
নেটকোডার

কোন উত্স থেকে আপনি ম্যাকের ঠিকানা পাচ্ছেন যা থেকে ডিলিমিটরের সংমিশ্রণ থাকতে পারে? যদি সেগুলি আসল মেশিন / এনআইসি থেকে আসে তবে আপনার সম্ভবত সমস্যা নেই। যদি এটি ব্যবহারকারী-প্রবেশ করা ডেটা হয় তবে সমস্ত ডিলিমিটরকে সামঞ্জস্যপূর্ণ করতে কেবল একটি স্ট্রিং প্রতিস্থাপন করুন।
জেলটন

2
/(?:[A-Fa-f0-9]{2}[:-]){5}(?:[A-Fa-f0-9]{2})/

এটি পাইলক্রোর জবাবের সাথে কি ঠিক: এক্সডিজিট ছাড়া?
জাইসফট


2
/^(([a-fA-F0-9]{2}-){5}[a-fA-F0-9]{2}|([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}|([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})?$/

উপরের রেজেক্স নীচে সমস্ত ম্যাক ঠিকানা প্রকারের বৈধতা দিন:

01-23-45-67-89-ab
01:23:45:67:89:ab
0123.4567.89ab

আমি মনে করি এটিই কেবলমাত্র সম্পূর্ণ এবং সঠিক।
ভিনসেন্ট সেলস


1

আমি মনে করি না যে প্রধান রেজিএক্স এটি শ্রেণিবদ্ধ হিসাবে সঠিক

'3D-F2-C9:A6-B3:4F' 

বৈধ ম্যাক ঠিকানা হিসাবে, যদিও এটি সঠিক নয়। সঠিকটি হ'ল:

((([a-zA-z0-9]{2}[-:]){5}([a-zA-z0-9]{2}))|(([a-zA-z0-9]{2}:){5}([a-zA-z0-9]{2})))

যাতে প্রতিবার আপনি পুরো ম্যাক ঠিকানার জন্য ':' বা '-' চয়ন করতে পারেন।


0

আপনি বৈধতার জন্য ম্যাক ঠিকানা পাস করে নিম্নলিখিত পদ্ধতিটি ব্যবহার করতে পারেন,

private static final String MAC_PATTERN = "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$";

private boolean validateMAC(final String mac){          
    Pattern pattern = Pattern.compile(MAC_PATTERN);
    Matcher matcher = pattern.matcher(mac);
    return matcher.matches();             
}


0

আপনার যদি এই ভেরিয়েন্টের মতো সংখ্যার মধ্যে ফাঁকির প্রয়োজন হয়

3D : F2 : C9 : A6 : B3 : 4F

রেজেক্সে পরিবর্তিত হয়

"^([0-9A-Fa-f]{2}\\s[:-]\\s){5}([0-9A-Fa-f]{2})$"

0

উভয়ই 48-বিট EUI-48 এবং 64-বিট EUI-64 MAC ঠিকানার সাথে মেলে:

/\A\h{2}([:\-]?\h{2}){5}\z|\A\h{2}([:\-]?\h{2}){7}\z/

যেখানে 0 h [0-9a-fA-F] এর একটি চরিত্র

বা:

/\A[0-9a-fA-F]{2}([:\-]?[0-9a-fA-F]{2}){5}\z|\A[0-9a-fA-F]{2}([:\-]?[0-9a-fA-F]{2}){7}\z/

এটি '-' বা ':' বা কোনও বিভাজক ব্যবহার করার অনুমতি দেয়


0

সম্ভবত সবচেয়ে কমতম:

/([\da-f]{2}[:-]){5}[\da-f]{2}/i

আপডেট : পিএইচপি-তে MAC ঠিকানাগুলি যাচাই করার জন্য একটি আরও ভাল উপায় বিদ্যমান যা হাইফেন-স্টাইল্ড এবং কোলন-স্টাইলযুক্ত ম্যাক উভয় ঠিকানার জন্য সমর্থন করে। ফিল্টার_ওয়ার () ব্যবহার করুন :

// Returns $macAddress, if it's a valid MAC address
filter_var($macAddress, FILTER_VALIDATE_MAC);

আমি জানি, এটি এই ফর্মগুলিতে ম্যাক ঠিকানাগুলি সমর্থন করে (x: একটি হেক্সাডেসিমাল সংখ্যা):

xx:xx:xx:xx:xx:xx
xx-xx-xx-xx-xx-xx
xxxx.xxxx.xxxx

0

উপরের দুর্দান্ত উত্তরের জন্য @ মোশিকে অনেক ধন্যবাদ । আরও কিছু গবেষণা করার পরে আমি আমার অতিরিক্ত অনুসন্ধানগুলি উভয়ই আইইইই 802 এর সাথে যুক্ত করতে এবং রেগেজেটে ধারাবাহিক বিভাজক প্রয়োগ প্রয়োগ করতে চাই।

মান মানুষের বান্ধব আকারে ম্যাক-48 ঠিকানাগুলি মুদ্রণের জন্য (আইইইই 802) বিন্যাস দুই হেক্সাডেসিমেল সংখ্যা, দ্বারা পৃথক ছয়টি গ্রুপ হয় হাইফেন - । তবে, বৃহত্তর: এবং চারটি হেক্সাডেসিমাল ডিজিটের তিনটি দলকে পিরিয়ড দ্বারা আলাদা করার জন্য এটি বহুলভাবে গৃহীত কনভেনশন

পূর্ণ ক্রেডিট @Moshe এখানে তার প্রাথমিক বিবৃতি জন্য, এবং @pilcrow জন্য ইশারা করে আইইইই 802 শুধুমাত্র hypens জুড়ে।

এখানে এমন একটি রেজেক্স রয়েছে যা ম্যাক ঠিকানার মধ্যে একই বিভাজকটি ব্যবহৃত হয়:

^(?:(?:[0-9A-Fa-f]{2}(?=([-:]))(?:\1[0-9A-Fa-f]{2}){5}))$

Regex101 ডেমো

এবং এখানে অতিরিক্ত একটি যা কোনও বিভাজককে মোটেই ব্যবহারের অনুমতি দেয়:

^(?:(?:[0-9A-Fa-f]{2}(?=([-:]|))(?:\1[0-9A-Fa-f]{2}){5}))$

Regex101 ডেমো


0

ম্যাকের ঠিকানা হিসাবে 6 বা 20 বাইট হতে পারে (ইনফিনিব্যান্ড, ...) সঠিক উত্তরটি হ'ল:

^([0-9A-Fa-f]{2}:){5}(([0-9A-Fa-f]{2}:){14})?([0-9A-Fa-f]{2})$

আপনি প্রতিস্থাপন করতে পারেন: সাথে [: -।]? আপনি যদি আলাদা বিভাজক বা কেউ না চান।


-1

এটি একটি ছোট একটি:

(([0-9A-F]{2}[:-]?){6})

মনে রাখবেন, বেশ কয়েকটি চর বা বিভাজকের মিশ্রণটি অতিক্রান্ত হতে পারে।


-4

সর্বোত্তম উত্তর হ'ল ম্যাক অ্যাড্রেস বৈধতা রেগেক্স

^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.