ডিএনএস হোস্টনাম বা আইপি ঠিকানার সাথে মেলে নিয়মিত প্রকাশ?


369

কারও কি নিয়মিত অভিব্যক্তি কার্যকর যা কোনও আইনি ডিএনএস হোস্টনাম বা আইপি ঠিকানার সাথে মিলবে?

এটি 95% সময় কাজ করে এমন একটি লেখা সহজ, তবে আমি DNS হোস্টনেমগুলির জন্য সর্বশেষতম আরএফসি স্পেসের সাথে সঠিকভাবে পরীক্ষা করার জন্য ভালভাবে পরীক্ষা করা এমন কিছু পাওয়ার প্রত্যাশা করছি।

উত্তর:


535

আপনি নিম্নলিখিত নিয়মিত এক্সপ্রেশন পৃথকভাবে বা একটি যৌথ OR প্রকাশের সাথে সংযুক্ত করে ব্যবহার করতে পারেন।

ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";

ValidHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$";

ValidIpAddressRegex বৈধ আইপি ঠিকানা এবং ValidHostnameRegex বৈধ হোস্টের নামের সাথে মেলে । আপনি যে ভাষাটি ব্যবহার করেন তার উপর নির্ভর করে with দিয়ে পালানো যেতে পারে \


আরএফসি 1123 অনুসারে ValidHostnameRegex বৈধ । মূলত, আরএফসি 952 নির্দিষ্ট করেছে যে হোস্টনাম বিভাগগুলি কোনও অঙ্ক দিয়ে শুরু করতে পারে না।

http://en.wikipedia.org/wiki/Hostname

আরএফসি 952 এ হোস্টনামের মূল স্পেসিফিকেশন , বাধ্যতামূলক যে লেবেলগুলি একটি অঙ্ক বা হাইফেন দিয়ে শুরু করতে পারে না এবং হাইফেন দিয়ে শেষ করা উচিত নয়। যাইহোক, পরবর্তী স্পেসিফিকেশন ( আরএফসি 1123 ) অঙ্কগুলি দিয়ে শুরু করার জন্য হোস্টনামের লেবেলগুলিকে অনুমতি দিয়েছে।

Valid952HostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";

3
এখানে: stackoverflow.com/questions/4645126/… - আমি ব্যাখ্যা করেছি যে একটি অঙ্কের সাথে শুরু হওয়া নামগুলিও বৈধ হিসাবে বিবেচিত হবে। এছাড়াও, শুধুমাত্র একটি বিন্দু সন্দেহজনক সমস্যা। এটি সম্পর্কে আরও প্রতিক্রিয়া জানাতে দুর্দান্ত হবে।
ব্রেকফ্র্যাক

16
আপনি আইপিভি 6 যুক্ত করতে চাইতে পারেন। ওপি কোন ধরণের ঠিকানা নির্দিষ্ট করে নি । (যাইহোক, এটি এখানে পাওয়া যাবে )
new123456

32
লোকেরা তাদের কোডগুলিতে অন্ধভাবে এটি ব্যবহার করার আগে নোট করুন যে এটি সম্পূর্ণ সঠিক নয়। এটি আরএফসি 2181 উপেক্ষা করে: "ডিএনএস নিজেই নির্দিষ্ট লেবেলের উপর কেবলমাত্র একটি বিধিনিষেধ স্থাপন করে যা রিসোর্স রেকর্ড সনাক্ত করতে ব্যবহার করা যেতে পারে That এই একটি সীমাবদ্ধতা লেবেলের দৈর্ঘ্য এবং পুরো নামের সাথে সম্পর্কিত any যে কোনও একটি লেবেলের দৈর্ঘ্যের মধ্যে সীমাবদ্ধ 1 এবং 63 octets। একটি সম্পূর্ণ ডোমেন নাম 255 অক্টেটের মধ্যে সীমাবদ্ধ (বিভাজক সহ) "
রুবেল

7
@ ইউজারকন্ট্রোল: নন-ল্যাটিন (পুণ্যকোডযুক্ত) হোস্টনামগুলি অবশ্যই প্রথমে ( éxämplè.com= xn--xmpl-loa1ab.com) এএসসিআই রূপে রূপান্তরিত করতে হবে এবং তারপরে যাচাইকরণ করতে হবে ।
অ্যালিক্স অ্যাক্সেল

6
আপনার হোস্টনামের অভিব্যক্তিটি কিছু অবৈধ মানের সাথে মিলেছে: আমি চেষ্টা করেছি 123.456.789.0এবং এটি বলছে এটি একটি বৈধ হোস্টনাম।
lbarreira

62

স্মিংকের হোস্টনাম রেজেেক্স একটি হোস্টনামের মধ্যে পৃথক লেবেলের দৈর্ঘ্যের সীমাবদ্ধতা পালন করে না। একটি বৈধ হোস্টনামের মধ্যে প্রতিটি লেবেল 63 অক্টোটের বেশি দীর্ঘ হতে পারে।

ValidHostnameRegex = "^ ([ZA-Z0-9] | [ZA-Z0-9] [ZA-Z0-9 \ -] {0,61} [ZA-Z0-9]) \
(\ ([ZA-Z0-9] |। [ZA-Z0-9] [ZA-Z0-9 \ -] {0,61} [ZA-Z0-9])) * $ "

মনে রাখবেন যে প্রথম লাইনের শেষে (উপরে) ব্যাকস্ল্যাশটি দীর্ঘ লাইনের বিভাজনের জন্য ইউনিক্স শেল সিনট্যাক্স। এটি নিজেই নিয়মিত প্রকাশের অংশ নয়।

এখানে কেবল একটি একক লাইনে নিয়মিত প্রকাশ হয়:

^ ([ZA-Z0-9] | [ZA-Z0-9] [ZA-Z0-9 \ -] {0,61} [ZA-Z0-9]) (\। ([zA-Z0-9] | [zA-Z0-9] [zA-Z0-9 \ -] {0,61} [zA-Z0-9])) * $

আপনার পৃথকভাবেও পরীক্ষা করা উচিত যে হোস্টনামের মোট দৈর্ঘ্য 255 টি অক্ষরের বেশি হওয়া উচিত নয় । আরও তথ্যের জন্য, দয়া করে আরএফসি -952 এবং আরএফসি -1123 এর সাথে পরামর্শ করুন।


6
দুর্দান্ত হোস্ট প্যাটার্ন। এটি সম্ভবত কারও ভাষার রেজেক্স বাস্তবায়নের উপর নির্ভর করে, তবে জেএসের জন্য এটি কিছু না হারাতে কিছুটা সামঞ্জস্য করা যায়:/^[a-z\d]([a-z\d\-]{0,61}[a-z\d])?(\.[a-z\d]([a-z\d\-]{0,61}[a-z\d])?)*$/i
সেমিকলন

31

একটি বৈধ আইপি ঠিকানার সাথে মেলে নিম্নলিখিত রেজেেক্সটি ব্যবহার করুন:

(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}

পরিবর্তে:

([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])(\.([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])){3}

ব্যাখ্যা

অনেকগুলি রেজেক্স ইঞ্জিন ORক্রমের প্রথম সম্ভাবনার সাথে মেলে । উদাহরণস্বরূপ, নিম্নলিখিত রেজেক্স ব্যবহার করে দেখুন:

10.48.0.200

পরীক্ষা

ভাল বনাম খারাপের মধ্যে পার্থক্যটি পরীক্ষা করুন


5
শুরু ^ এবং শেষ forget বা 0.0.0.999 বা 999.0.0.0 এর মতো কোনও কিছু মিলবে না। ;)
Andreas

1
হ্যাঁ একটি স্ট্রিং বৈধ করতে ^ এবং শেষ required প্রয়োজনীয়, তবে আপনি যদি কোনও পাঠ্যের মধ্যে কোনও আইপি অনুসন্ধান করেন তবে এটি ব্যবহার করবেন না।
Alban

আপনি চিহ্নিত অযৌক্তিক 'অ-লোভীতা' অন্যান্য হোস্টের নাম সমাধানগুলিতেও প্রযোজ্য। এটি আপনার উত্তরে যুক্ত করা উপযুক্ত হবে কারণ অন্যরা সম্পূর্ণ হোস্টনামের সাথে মেলে না। যেমন ([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*বনাম([a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]|[a-zA-Z0-9])(\.([a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])|[a-zA-Z0-9]))*
এরগোহাক

সম্পাদনা: উপরের দিকে, ব্যর্থতা দেখার +পরিবর্তে শেষে ব্যবহার করুন *
এরগোহাক

5

আমি শীর্ষ পোস্টটি সম্পাদনা করতে সক্ষম বলে মনে হচ্ছে না, তাই আমি আমার উত্তর এখানে যুক্ত করব।

হোস্টনামের জন্য - সহজ উত্তরের জন্য, উদাহরণস্বরূপ এখানে - http: //www.linuxinsight.com/how_to_grep_for_ip_add્રેસ_used_the_gnu_egrep_utility.html

egrep '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'

যদিও মামলাটি মুষ্টি অক্টেটে 0 এর মতো মানগুলির জন্য অ্যাকাউন্ট করে না এবং 254 (আইপি অ্যাড্রেস) বা 255 (নেটমাস্ক) এর চেয়ে বেশি মানের। বিবৃতি সাহায্য করবে যদি একটি অতিরিক্ত হতে পারে।

আইনী ডিএনএস হোস্টনামের শর্ত হিসাবে, আপনি কেবল ইন্টারনেট হোস্টনামের জন্য পরীক্ষা করছেন (এবং ইন্ট্রনেট নয়), আমি নীচে স্নিপড লিখেছি, শেল / পিএইচপি মিশ্রিত তবে এটি কোনও নিয়মিত অভিব্যক্তি হিসাবে প্রযোজ্য উচিত।

প্রথমে আইটিএফ ওয়েবসাইটে যান, আইনি স্তরের 1 ডোমেন নামের একটি তালিকা ডাউনলোড করুন এবং পার্স করুন:

tld=$(curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt |  sed 1d  | cut -f1 -d'-' | tr '\n' '|' | sed 's/\(.*\)./\1/')
echo "($tld)"

এটি আপনাকে পুনরায় কোডের একটি দুর্দান্ত অংশ দেবে যা শীর্ষস্থানীয় ডোমেন নামের বৈধতার জন্য পরীক্ষা করে।

তারপরে এখানে পাওয়া নির্দেশিকাগুলি অনুসারে প্রকাশের প্রথম অংশ যুক্ত করুন - http: //www.domainit.com/support/faq.mhtml?category=Domain_FAQ&question=9 (কোনও বর্ণানুক্রমিক সংমিশ্রণ এবং '-' চিহ্ন, ড্যাশের মধ্যে থাকা উচিত নয়) একটি অক্টেটের শুরু বা শেষ।

(([a-z0-9]+|([a-z0-9]+[-]+[a-z0-9]+))[.])+

তারপরে এটি সব একসাথে রাখুন (পিএইচপি প্রিগ_ম্যাচ উদাহরণ):

$pattern = '/^(([a-z0-9]+|([a-z0-9]+[-]+[a-z0-9]+))[.])+(AC|AD|AE|AERO|AF|AG|AI|AL|AM|AN|AO|AQ|AR|ARPA|AS|ASIA|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BIZ|BJ|BM|BN|BO|BR|BS|BT|BV|BW|BY|BZ|CA|CAT|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|COM|COOP|CR|CU|CV|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EDU|EE|EG|ER|ES|ET|EU|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GOV|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|INFO|INT|IO|IQ|IR|IS|IT|JE|JM|JO|JOBS|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MG|MH|MIL|MK|ML|MM|MN|MO|MOBI|MP|MQ|MR|MS|MT|MU|MUSEUM|MV|MW|MX|MY|MZ|NA|NAME|NC|NE|NET|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|ORG|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PRO|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|ST|SU|SV|SY|SZ|TC|TD|TEL|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TP|TR|TRAVEL|TT|TV|TW|TZ|UA|UG|UK|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XN|XN|XN|XN|XN|XN|XN|XN|XN|XN|XN|YE|YT|YU|ZA|ZM|ZW)[.]?$/i';

    if (preg_match, $pattern, $matching_string){
    ... do stuff
    }

আপনি যে স্ট্রিংটি পরীক্ষা করেছেন তা 256 টির চেয়ে কম অক্ষরের চেক করতে আপনি যদি একটি বিবৃতি যুক্ত করতে পারেন - http://www.ops.ietf.org/lists/nameroppers/nameroppers.2003/msg00964.html


1
-1 কারণ এটি "999.999.999.999" এর মতো বোগাস আইপি ঠিকানার সাথে মেলে।
বিডেশম

1
"যদিও মামলাটি মুষ্টি অক্টেটে 0 এর মতো মানগুলির জন্য অ্যাকাউন্ট করে না এবং 254 (আইপি অ্যাড্রেস) বা 255 (নেটমাস্ক) এর চেয়ে বেশি মানের।"
অ্যালেক্স ভোলকভ

আমি দেখেছি যে আপনি আপনার উত্তরটি যোগ্য করে তুলেছেন, হ্যাঁ। আমি হ্রাস পেয়েছি কারণ আপনার উত্তরটির সেই অংশটি এখনও কার্যকর নয়।
বিডেশাম

3

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

উদাহরণস্বরূপ, আইপিভি 4 সনাক্তকরণ এবং পার্সিং (POSIX) সি:

#include <arpa/inet.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
  for (int i=1; i!=argc; ++i) {
    struct in_addr addr = {0};
    printf("%s: ", argv[i]);
    if (inet_pton(AF_INET, argv[i], &addr) != 1)
      printf("invalid\n");
    else
      printf("%u\n", addr.s_addr);
  }
  return 0;
}

স্পষ্টতই, আপনি যদি চ্যাট বার্তায় সমস্ত বৈধ ঠিকানাগুলি খুঁজে পেতে চেষ্টা করেন তবে এই জাতীয় ফাংশনগুলি কাজ করবে না - তবে সেখানেও, সম্ভাব্য মিলগুলি খুঁজে পেতে একটি সহজ তবে অত্যধিক alousর্ষাকৃত রেজেক্স ব্যবহার করা আরও সহজ হতে পারে এবং তারপরে এটি ব্যবহার করুন তাদের পার্স করার জন্য লাইব্রেরি।

উদাহরণস্বরূপ, পাইথনে:

>>> import ipaddress
>>> import re
>>> msg = "My address is 192.168.0.42; 192.168.0.420 is not an address"
>>> for maybeip in re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', msg):
...     try:
...         print(ipaddress.ip_address(maybeip))
...     except ValueError:
...         pass

2
def isValidHostname(hostname):

    if len(hostname) > 255:
        return False
    if hostname[-1:] == ".":
        hostname = hostname[:-1]   # strip exactly one dot from the right,
                                   #  if present
    allowed = re.compile("(?!-)[A-Z\d-]{1,63}(?<!-)$", re.IGNORECASE)
    return all(allowed.match(x) for x in hostname.split("."))

আপনি এই রেজেক্স ব্যাখ্যা করতে পারেন? ঠিক কী, (?! -), (? <! -) এর অর্থ কী?
স্কিট

1
@ স্কিট, তারাই নিশ্চিত করে যে এটি "-" অক্ষর দিয়ে শুরু হয় না বা শেষ হয় না যদি আপনার রেজেক্স ইঞ্জিন তাদের ব্যবহারের অনুমতি দেয়। উদাহরণস্বরূপ, পাইথন থেকে বা পার্ল থেকে
YLearn

1

আমি মনে করি এটিই সেরা আইপি বৈধতা রেগেক্স। একবার এটি পরীক্ষা করে দেখুন !!!

^(([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))\.){3}([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))$

1
"^((\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\.){3}(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])$"

1

এটি বৈধ আইপি ঠিকানাগুলির জন্য কাজ করে:

regex = '^([0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-5][0-5])[.]([0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-5][0-5])[.]([0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-5][0-5])[.]([0-9]|[1-9][0-9]|[1][0-9][0-9]|[2][0-5][0-5])$'

1
/^(?:[a-zA-Z0-9]+|[a-zA-Z0-9][-a-zA-Z0-9]+[a-zA-Z0-9])(?:\.[a-zA-Z0-9]+|[a-zA-Z0-9][-a-zA-Z0-9]+[a-zA-Z0-9])?$/

0

এখানে একটি রেইজেক্স রয়েছে যা আমি পিঁপিতে একটি প্রক্সি হোস্ট আইপি বা ANT_OPTS এর মধ্যে হোস্টনামটি পেতে ব্যবহার করেছি। এটি প্রক্সি আইপি প্রাপ্ত করার জন্য ব্যবহার করা হয়েছিল যাতে আমি কাঁটাযুক্ত জেভিএমের জন্য প্রক্সি কনফিগার করার আগে একটি পিঁপড়া "ইশ্রিচিয়েবল" পরীক্ষা চালাতে পারি।

^.*-Dhttp\.proxyHost=(\w{1,}\.\w{1,}\.\w{1,}\.*\w{0,})\s.*$

এটি \wঠিক সেখানে, এটি আইপি ক্যাপচার করবে না, নির্দিষ্ট পরিস্থিতিতে কেবল হোস্টনেম।
ইয়ারন

0

আমি দেখতে পেয়েছি এটি আইপি অ্যাড্রেসের জন্য বেশ ভাল কাজ করে। এটি শীর্ষ উত্তরের মতো বৈধতা দেয় তবে এটি আইপি বিচ্ছিন্ন হওয়ার বিষয়টিও নিশ্চিত করে তাই আইপি-র পরে বা তার আগে কোনও পাঠ্য বা বেশি সংখ্যা / দশমিক নয়।

(?! <\ এস)? (: (: \ ঘ | [1-9] \ ঘ | 1 \ ঘ \ ঘ | 2 [0-4] \ ঘ | 25 [0-5]) \ b হল |। \ খ) {7} (?! \ এস)


আমি অনেক চেষ্টা করেছি কিন্তু আমি এখানে 2 টি জিনিস বুঝতে পারি না। 1. \ b শব্দের সীমা নির্দিষ্ট করে কেন আমরা \ বি ব্যবহার করছি? কোন সীমানা? এবং ২. কেন এটি কেবল {7 for এর জন্য কাজ করে যা আমি বুঝতে পেরেছি তা থেকে আমার মনে হয় এটি {4 should হওয়া উচিত তবে এটি কাজ করছে না। Ptionচ্ছিকভাবে, আপনি কেন নন-ক্যাপচারিং ব্লক ব্যবহার করছেন তা সম্পর্কে বলতে পারেন।
শ্রীচক্রধর

0
AddressRegex = "^(ftp|http|https):\/\/([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{1,5})$";

HostnameRegex =  /^(ftp|http|https):\/\/([a-z0-9]+\.)?[a-z0-9][a-z0-9-]*((\.[a-z]{2,6})|(\.[a-z]{2,6})(\.[a-z]{2,6}))$/i

এই পুনরায় কেবল এই ধরণের বৈধতার জন্য ব্যবহৃত হয়

কেবলমাত্র http://www.kk.com http://www.kk.co.in এ কাজ করুন

জন্য কাজ করে না

http://www.kk.com/ http: //www.kk.co.in.kk

http://www.kk.com/dfas http://www.kk.co.in/



0

আইপি অ্যাড্রেস সম্পর্কিত, এটি প্রদর্শিত হবে যে নেতৃস্থানীয় শূন্যগুলি অন্তর্ভুক্ত করা হবে কিনা তা নিয়ে কিছুটা বিতর্ক রয়েছে। এটি একসময় সাধারণ অনুশীলন ছিল এবং সাধারণত গৃহীত হয়, তাই আমি যুক্তি দিয়ে বলব যে বর্তমানের পছন্দ বিবেচনা না করে এগুলি বৈধ হিসাবে চিহ্নিত করা উচিত । স্ট্রিংটির আগে এবং পরে পাঠ্যটি বৈধ হওয়া উচিত কিনা এবং সে সম্পর্কেও আবার কিছুটা অস্পষ্টতা রয়েছে I 1.2.3.4 একটি বৈধ আইপি তবে 1.2.3.4.5 হয় না এবং 1.2.3.4 অংশ বা 2.3.4.5 অংশটি কোনও ম্যাচের ফলাফল হতে পারে। কিছু উদ্বেগ এই অভিব্যক্তি দিয়ে পরিচালনা করা যেতে পারে:

grep -E '(^|[^[:alnum:]+)(([0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.){3}([0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])([^[:alnum:]]|$)' 

এখানে দুর্ভাগ্যজনক অংশটি হ'ল সত্য যে রেজেক্স অংশটি যা একটি অক্টেটকে বৈধতা দেয় তা অনেকগুলি প্রস্তাবিত সমাধানে সত্য হিসাবে পুনরাবৃত্তি হয়। যদিও এটি প্যাটার্নের উদাহরণগুলির চেয়ে ভাল তবে পুনরাবৃত্তি সম্পূর্ণরূপে মুছে ফেলা যায় যদি সাবরেটাইনগুলি ব্যবহার করা হচ্ছে রেজেক্সে সমর্থিত হয়। পরবর্তী উদাহরণটি সেই ফাংশনগুলিকে -Pস্যুইচ করে সক্ষম করে grepএবং লুকোহেড এবং লুকবিহিন কার্যকারিতার সুবিধা গ্রহণ করে। (আমি নির্বাচিত ফাংশনের নামটি অক্টেটের জন্য 'ও' I নাম হিসাবে আমি 'অকটেট' ব্যবহার করতে পারতাম তবে ছড়িয়ে যেতে চাইতাম))

grep -P '(?<![\d\w\.])(?<o>([0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(\.\g<o>){3}(?![\d\w\.])'

আইট ঠিকানাগুলি বাক্য আকারে পাঠ্যযুক্ত কোনও ফাইলে আইপি অ্যাড্রেসগুলি বিন্দু চিহ্নিতকরণের অংশ না হয়ে অনুসরণ করতে পারে বলে ডট হ্যান্ডলিংটি আসলে একটি মিথ্যা নেগেটিভ তৈরি করতে পারে। উপরের একটি বৈকল্পিক এটি ঠিক করবে:

grep -P '(?<![\d\w\.])(?<x>([0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(\.\g<x>){3}(?!([\d\w]|\.\d))'

0
>>> my_hostname = "testhostn.ame"
>>> print bool(re.match("^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$", my_hostname))
True
>>> my_hostname = "testhostn....ame"
>>> print bool(re.match("^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$", my_hostname))
False
>>> my_hostname = "testhostn.A.ame"
>>> print bool(re.match("^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$", my_hostname))
True

0

নতুন নেটওয়ার্ক কাঠামোর স্ট্রাক্ট আইভিভি 4 অ্যাড্রেস এবং স্ট্রাক্ট আইপিভি 6 অ্যাড্রেসের জন্য অনুপযুক্ত আরম্ভকারী রয়েছে যা আইপি ঠিকানার অংশটি খুব সহজেই পরিচালনা করে। একটি সংক্ষিপ্ত বিবরণ সহ আইপিভি 6 এ করা সমস্ত সংক্ষিপ্ত নিয়মের সাথে শক্ত tough

দুর্ভাগ্যক্রমে আমার কাছে হোস্টনামের জন্য মার্জিত উত্তর নেই।

নোট করুন যে নেটওয়ার্ক ফ্রেমওয়ার্কটি সাম্প্রতিক, সুতরাং এটি আপনাকে সাম্প্রতিক ওএস সংস্করণগুলির জন্য সংকলন করতে বাধ্য করতে পারে।

import Network
let tests = ["192.168.4.4","fkjhwojfw","192.168.4.4.4","2620:3","2620::33"]

for test in tests {
    if let _ = IPv4Address(test) {
        debugPrint("\(test) is valid ipv4 address")
    } else if let _ = IPv6Address(test) {
        debugPrint("\(test) is valid ipv6 address")
    } else {
        debugPrint("\(test) is not a valid IP address")
    }
}

output:
"192.168.4.4 is valid ipv4 address"
"fkjhwojfw is not a valid IP address"
"192.168.4.4.4 is not a valid IP address"
"2620:3 is not a valid IP address"
"2620::33 is valid ipv6 address"

-1

এ কেমন?

([0-9]{1,3}\.){3}[0-9]{1,3}

এবং তাই 9999999999.0.0.9999999999 :) তবে বেশিরভাগ প্রোগ্রামারদের ক্ষেত্রে, এই সংক্ষিপ্ত পদ্ধতির যথেষ্ট।
andreas

3
-1 কারণ এটি ননসেন্স আইপি ঠিকানার সাথে মেলে (@ সাহেবুকা নোট হিসাবে)।
বিডেশম

-1

পিএইচপি তে: filter_var(gethostbyname($dns), FILTER_VALIDATE_IP) == true ? 'ip' : 'not ip'


2
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, সাধারণত কোডের পাশাপাশি ব্যাখ্যা একটি উত্তরকে আরও কার্যকর করে তোলে। দয়া করে সম্পাদনা আপনার উত্তর এবং কিছু প্রসঙ্গ এবং ব্যাখ্যা প্রদান।
ব্যবহারকারী4642212

এবং, আমি ভুল না হলে, FILTER_VALIDATE_IP কেবলমাত্র একটি পিএইচপি মান।
ডনগার

-2

... mywebsite.co.in, thangaraj.name, 18tangaraj.in, thangaraj106.in ইত্যাদি হোস্ট নামগুলির জন্য অনুসন্ধান করা হচ্ছে,

[a-z\d+].*?\\.\w{2,4}$

3
-1। ওপিতে "সর্বশেষতম আরএফসি স্পেসের সাথে ঠিক মেলে পরীক্ষা করার জন্য" কিছু জিজ্ঞাসা করা হয়েছিল, তবে এটি * * মিউসিয়ামের সাথে মেলে না, যখন এটি * .foo এর সাথে মিলবে। এখানে বৈধ টিএলডিগুলির একটি তালিকা
বিডেশম

আমি নিশ্চিত নই যে অক্ষর শ্রেণীর (বর্গাকার বন্ধনীর) ভিতরে প্লাস যুক্ত করা ভাল ধারণা, তদ্ব্যতীত, 5 টি বর্ণ সহ টিএলডি রয়েছে ( উদাহরণস্বরূপ এক্সপার্ট )।
ইয়ারন

আরএফসির সাথে সাফল্যের সর্বোত্তম উপায় হ'ল সিস্টেম / ভাষা ফাংশন ব্যবহার করা। inet_atonযথেষ্ট ভাল।
এম

-2

আমি আইপি ঠিকানার সাথে মিল রেখে এই সাধারণ রেজেক্স ম্যাচিং প্যাটার্নটি সম্পর্কে চিন্তা করেছি [d + [।] \ D + [।] \ D + [।] \ D +


1111.1.1.1 কোনও বৈধ আইপি নয়। আপনি সাবনেট সম্পর্কে যত্ন না নিলে কোনও আইপি ফর্ম্যাটটি পরীক্ষা করার কোনও উপায় নেই। আপনার পক্ষে কমপক্ষে এমন কিছু উপস্থিতির সংখ্যা সম্পর্কে অবশ্যই যত্ন নেওয়া উচিত যা ^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}অবশ্যই সঠিক উপায় নয় be আপনার যদি স্ক্রিপ্ট লেখার জন্য লুঙ্গুজে থাকে তবে অবশ্যই এটির নেটওয়ার্ক ফাংশনে আপনার অ্যাক্সেস থাকবে। রিয়েল আইপি চেক করার সর্বোত্তম উপায় এটি সিস্টেমকে রূপান্তর করতে বলা এবং এটি সঠিক ফর্ম্যাটে আইপি করা উচিত তবে সত্য / মিথ্যা পরীক্ষা করে দেখুন। পাইথনের ক্ষেত্রে আমি ব্যবহার করি socket.inet_aton(ip)। পিএইচপি আপনার প্রয়োজন inet_aton($ip)
এম

পাইথন ব্যবহারকারীরা এখানে একবার নজর দিতে পারেন: gist.github.com/erm3nda/f25439bba66931d3ca9699b2816e796c
m3nda
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.