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


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.