ইউকে পোস্টকোডগুলির সাথে মিলে যাওয়ার জন্য RegEx


185

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

ম্যাচ

  • সিডাব্লু 3 9 এসএস
  • এসই 5 0 জি
  • SE50EG
  • se5 0eg
  • WC2H 7LT

মিল নেই

  • aWC2H 7LT
  • WC2H 7LTa
  • WC2H

আমি কীভাবে এই সমস্যার সমাধান করব?


2
@axrwkr যা সহায়ক মনে হচ্ছে না
কিয়েরান বেনটন

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

2
প্রদত্ত লিঙ্কটি "AA1A 1AA" ফর্ম্যাটের জন্য কাজ করে না। তথ্যসূত্র: dhl.com.tw/content/dam/downloads/tw/express/forms/…
অ্যান্টনি স্কাইফ

1
আপনি যদি কেবল কোনও পোস্টকোডকে বৈধতা দিতে চান তবে আমরা একটি নিখরচায় (সাইন আপ প্রয়োজন) বৈধতা REST এপিআই শেষ পয়েন্ট - ডেভেলপার্স
.ালাইসকমপটিং / পোস্টস্টেকার-ওয়েবে-

1
ভাল প্রশ্ন. আমি মনে করি আপনার মিল থাকা প্রয়োজন এমন অস্বাভাবিক উদাহরণগুলির তালিকায় "এম 1 3 এইচজেড" এর মতো কেন্দ্রীয় ম্যানচেস্টার পোস্টকোডগুলি অন্তর্ভুক্ত করা উপযুক্ত হবে। 1 টি 1 নম্বর 1 কম্বো সম্পর্কে অনেকেই অবগত নন।
মার্টিন যোগদানকারী

উত্তর:


207

আমি পোস্টকোডের জন্য যুক্তরাজ্য সরকারের ডেটা স্ট্যান্ডার্ডকে একবার দেখার পরামর্শ দিচ্ছি [লিঙ্কটি এখন মারা গেছে; এক্সএমএলের সংরক্ষণাগার, আলোচনার জন্য উইকিপিডিয়া দেখুন ]। ডেটা সম্পর্কে একটি সংক্ষিপ্ত বিবরণ রয়েছে এবং সংযুক্ত এক্সএমএল স্কিমা একটি নিয়মিত অভিব্যক্তি সরবরাহ করে। এটি আপনি যা চান ঠিক তেমনটি নাও হতে পারে তবে এটি একটি সূচনা পয়েন্ট হতে পারে। রেজিএক্স এক্সএমএল থেকে সামান্য পৃথক, কারণ A9A 9AA ফর্ম্যাটটিতে তৃতীয় অবস্থানে থাকা পি অক্ষরটি প্রদত্ত সংজ্ঞা দ্বারা অনুমোদিত is

যুক্তরাজ্য সরকারের সরবরাহিত রেজিএক্সটি হ'ল:

([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\s?[0-9][A-Za-z]{2})

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


52
এবং সেই রেগটি দুটি বিভাগের (জিআইআর 0 এএ) মধ্যে alচ্ছিক সাদা স্থানের সাথে প্রস্থান করেছে | ((([এজেড- [কিউভিএক্স]] [0-9] [0-9]?) | (([এজেড- [কিউভিএক্স]] [AZ- [IJZ]] [0-9] [0-9]) |? (([AZ- [QVX]] [0-9] [এ-HJKSTUW]) | ([AZ- [QVX]] [ এজেড- [আইজেজেড]] [০-৯] [এবিএইচএমএনপিআরভিডাব্লুএক্সএক্স]))) \ এস? [0-9] [এজেড- [সিকমভ]] {2})
জিবি

6
উত্তরগুলিতে আসল রেজেক্স আনতে ভাল ধারণা হতে পারে, যেহেতু প্রতিবছর পৃষ্ঠাগুলি
সমাপ্ত


6
আমি এটি জাভাস্ক্রিপ্টে কাজ করতে পারি না। এটি কি নির্দিষ্ট রেজেক্স ইঞ্জিনগুলির সাথে কাজ করে?
নিকজি

12
আসলে তারা এটিকে পরিবর্তন করেছে: বাল্ক ডেটা স্থানান্তর :^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))[0-9][A-Za-z]{2})$
wieczorek1990

85

দেখে মনে হচ্ছে আমরা ব্যবহার করতে যাচ্ছি ^(GIR ?0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]([0-9ABEHMNPRV-Y])?)|[0-9][A-HJKPS-UW]) ?[0-9][ABD-HJLNP-UW-Z]{2})$যা উপরের মিংলিসের সুরসেটের একটি সামান্য পরিবর্তিত সংস্করণ।

যাইহোক, আমাদের বিধিগুলি ঠিক কী তা তদন্ত করতে যাচ্ছি, যেহেতু উপরে তালিকাভুক্ত বিভিন্ন সমাধানগুলি বর্ণগুলি অনুমোদিত কিনা সে সম্পর্কে বিভিন্ন বিধি প্রয়োগ করতে দেখা যাচ্ছে।

কিছু গবেষণা করার পরে, আমরা আরও কিছু তথ্য পেয়েছি। স্পষ্টতই 'govtalk.gov.uk' এর একটি পৃষ্ঠা আপনাকে একটি পোস্টকোড স্পেসিফিকেশন গভটলক-পোস্টকোডগুলিতে নির্দেশ করে । এটি এক্সএমএল স্কিমাতে একটি এক্সএমএল স্কিমাকে নির্দেশ করে যা পোস্টকোড নিয়মের একটি 'সিউডো রেজেক্স' বিবৃতি সরবরাহ করে।

আমরা এটি নিয়েছি এবং আমাদের নিম্নোক্ত অভিব্যক্তিটি জানানোর জন্য এটিতে কিছুটা কাজ করেছি:

^((GIR &0AA)|((([A-PR-UWYZ][A-HK-Y]?[0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRV-Y]))) &[0-9][ABD-HJLNP-UW-Z]{2}))$

এটি স্পেসগুলি alচ্ছিক করে তোলে, তবে আপনাকে একটি স্পেসে সীমাবদ্ধ করে না (সীমিত স্থানগুলির জন্য '&' প্রতিস্থাপন করুন '। 0,।) এটি ধরে নিচ্ছে যে সমস্ত পাঠ্য অবশ্যই আপার-কেস হতে হবে।

আপনি যদি কোনও সংখ্যা ফাঁকা করে লোয়ার কেসগুলিতে অনুমতি দিতে চান তবে ব্যবহার করুন:

^(([gG][iI][rR] {0,}0[aA]{2})|((([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y]?[0-9][0-9]?)|(([a-pr-uwyzA-PR-UWYZ][0-9][a-hjkstuwA-HJKSTUW])|([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y][0-9][abehmnprv-yABEHMNPRV-Y]))) {0,}[0-9][abd-hjlnp-uw-zABD-HJLNP-UW-Z]{2}))$

এটি বিদেশের অঞ্চলগুলিকে কভার করে না এবং কেবলমাত্র বিভিন্ন অঞ্চলের অস্তিত্ব নয়, ফর্ম্যাটটি প্রয়োগ করে। এটি নিম্নলিখিত নিয়মের উপর ভিত্তি করে:

নিম্নলিখিত ফর্ম্যাটগুলি গ্রহণ করতে পারে:

  • "জিআর 0 এএ"
  • এ 9 9 জেড
  • A99 9ZZ
  • AB9 9ZZ
  • AB99 9ZZ
  • A9C 9ZZ
  • AD9E 9ZZ

কোথায়:

  • 9 যে কোনও একক সংখ্যা হতে পারে।
  • এ, কিউ, ভি বা এক্স ব্যতীত যে কোনও চিঠি হতে পারে A
  • বি আমি, জে বা জেড বাদে যে কোনও চিঠি হতে পারে B
  • সি আমি, এল, এম, এন, ও, পি, কিউ, আর, ভি, এক্স, ওয়াই বা জেড বাদে কোনও চিঠি হতে পারে C
  • ডি আমি, জে বা জেড বাদে কোনও চিঠি হতে পারে can
  • ই এ, বি, ই, এইচ, এম, এন, পি, আর, ভি, ডাব্লু, এক্স বা ওয়াই যে কোনও হতে পারে E
  • জেড সি, আই, কে, এম, ও বা ভি বাদে যে কোনও চিঠি হতে পারে be

শুভ কামনা

কলিন


2
দুর্দান্ত উত্তর, আমি ^(([gG][iI][rR] {0,}0[aA]{2})|(([aA][sS][cC][nN]|[sS][tT][hH][lL]|[tT][dD][cC][uU]|[bB][bB][nN][dD]|[bB][iI][qQ][qQ]|[fF][iI][qQ][qQ]|[pP][cC][rR][nN]|[sS][iI][qQ][qQ]|[iT][kK][cC][aA]) {0,}1[zZ]{2})|((([a-pr-uwyzA-PR-UWYZ][a-hk-yxA-HK-XY]?[0-9][0-9]?)|(([a-pr-uwyzA-PR-UWYZ][0-9][a-hjkstuwA-HJKSTUW])|([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y][0-9][abehmnprv-yABEHMNPRV-Y]))) {0,}[0-9][abd-hjlnp-uw-zABD-HJLNP-UW-Z]{2}))$
ডেভিড ব্র্যাডশো

সীমাহীন, alচ্ছিক জায়গাগুলির {0,}পরিবর্তে কেন নির্দিষ্ট *করবেন?
কোড

75

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

আমি নীচে এই বিষয়গুলির কয়েকটি রূপরেখা করব এবং সংশোধিত নিয়মিত ভাব প্রকাশ করব যা আসলে কাজ করে।


বিঃদ্রঃ

আমার উত্তর (এবং সাধারণভাবে নিয়মিত প্রকাশ):

  • শুধুমাত্র পোস্টকোড ফর্ম্যাটগুলি বৈধতা দেয়
  • বৈধভাবে একটি পোস্টকোড বিদ্যমান তা নিশ্চিত করে না
    • এই জন্য, একটি উপযুক্ত এপিআই ব্যবহার করুন! দেখুন বেন এর উত্তর আরও তথ্যের জন্য।

আপনি যদি খারাপ রেজেক্স সম্পর্কে চিন্তা করেন না এবং কেবল উত্তরটি এড়াতে চান তবে উত্তর বিভাগে স্ক্রোল করুন ।

দ্য রেজেক্স

এই বিভাগে নিয়মিত প্রকাশগুলি ব্যবহার করা উচিত নয়।

এটি যুক্তরাজ্য সরকার বিকাশকারীদের সরবরাহ করেছে (এই লিঙ্কটি কত দিন স্থায়ী হবে তা নিশ্চিত নয়, তবে আপনি এটি তাদের বাল্ক ডেটা স্থানান্তর নথিতে দেখতে পারেন ):

^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))[0-9][A-Za-z]{2})$

সমস্যা

সমস্যা 1 - অনুলিপি / আটকান

ব্যবহারের জন্য রেজেক্স দেখুন

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

^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))
[0-9][A-Za-z]{2})$

সর্বাধিক বিকাশকারীরা প্রথম যে কাজটি করবেন তা হ'ল দু'বার চিন্তা না করে কেবল নতুন লাইনটি মুছুন। এখন রেজেক্সগুলি ফাঁকা জায়গাগুলির সাথে পোস্টকোডগুলি মেলে না ( GIR 0AAপোস্টকোড ব্যতীত )।

এই সমস্যাটি সমাধানের জন্য, নতুন লাইন অক্ষরটি স্থানের অক্ষরের সাথে প্রতিস্থাপন করা উচিত:

^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$
                                                                                                                                                     ^

সমস্যা 2 - সীমানা

ব্যবহারের জন্য রেজেক্স দেখুন

^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$
^^                     ^ ^                                                                                                                                            ^^

পোস্টকোড রেজেক্স অযৌক্তিকভাবে রিজেক্সকে অ্যাঙ্কর করে। পোস্টকোডগুলিকে বৈধতা দেওয়ার জন্য এই রেজেক্স ব্যবহার করা যে কেউ যদি এর মতো মানটি fooA11 1AAপায় তবে অবাক হতে পারেন । কারণ তারা উপরের রেজেক্সে নির্দেশিত হয়েছে, প্রথম বিকল্পের শুরু এবং দ্বিতীয় বিকল্পের শেষে (একে অপরের থেকে স্বতন্ত্রভাবে) অ্যাঙ্কর করেছে That's

এর অর্থটি হ'ল ^(লাইনের শুরুতে অবস্থানটি দৃser় করে) কেবলমাত্র প্রথম বিকল্পে কাজ করে ([Gg][Ii][Rr] 0[Aa]{2}), সুতরাং দ্বিতীয় বিকল্পটি কোনও পোস্টকোডে শেষ হওয়া কোনও স্ট্রিংকে বৈধতা দেবে (পূর্বে যা আসে তা নির্বিশেষে)।

একইভাবে, প্রথম বিকল্পটি লাইনটির শেষ প্রান্তে অ্যাঙ্করড নয় $, তাই GIR 0AAfooএটি গ্রহণযোগ্যও।

^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))[0-9][A-Za-z]{2})$

এই সমস্যাটি সমাধান করার জন্য, উভয় অপশনই অন্য একটি গ্রুপে আবৃত করা উচিত (বা নন-ক্যাপচারিং গ্রুপ) এবং তার চারপাশে রাখা অ্যাঙ্করগুলি:

^(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2}))$
^^                                                                                                                                                                      ^^

সমস্যা 3 - অনুপযুক্ত চরিত্র সেট

ব্যবহারের জন্য রেজেক্স দেখুন

^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$
                                                                                       ^^

রেজেক্স -অক্ষরের একটি ব্যাপ্তি নির্দেশ করতে এখানে একটি অনুপস্থিত । যেমনটি দাঁড়িয়েছে, যদি কোনও পোস্টকোড ফর্ম্যাটে থাকে ANA NAA(যেখানে Aএকটি বর্ণকে Nউপস্থাপন করে এবং একটি সংখ্যাকে উপস্থাপন করে), এবং এটি ব্যতীত Aবা অন্য যে কোনও কিছু থেকে শুরু হয় Z, এটি ব্যর্থ হবে।

তার মানে এটি মিলবে A1A 1AAএবং Z1A 1AAতবে নয় B1A 1AA

এই সমস্যাটি সমাধানের জন্য, চরিত্রটি -অবশ্যই সংশ্লিষ্ট চরিত্রের মধ্যে Aএবং Zমধ্যে স্থাপন করা উচিত :

^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$
                                                                                        ^

সমস্যা 4 - ভুল ptionচ্ছিক অক্ষর সেট

ব্যবহারের জন্য রেজেক্স দেখুন

^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$
                                                                                                                                        ^

আমি শপথ করছি তারা ওয়েবে এই প্রচার করার আগে তারা এই জিনিসটি পরীক্ষাও করেনি। তারা ভুল চরিত্র সেট alচ্ছিক করেছে। তারা [0-9]বিকল্প 2 (গ্রুপ 9) এর চতুর্থ উপ-বিকল্পে বিকল্প তৈরি করেছে। এটি রেজ্যাগেক্সকে ভুল ফর্ম্যাটেড পোস্টকোডের মতো মেলানোর অনুমতি দেয় AAA 1AA

এই সমস্যাটি সমাধানের জন্য পরবর্তী অক্ষর শ্রেণীর পরিবর্তে alচ্ছিক করুন (এবং পরবর্তী সময়ে সেটটি [0-9]ম্যাচটি ঠিক একবার করুন):

^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?)))) [0-9][A-Za-z]{2})$
                                                                                                                                                ^

সমস্যা 5 - পারফরম্যান্স

এই রেজেক্সে অভিনয় অত্যন্ত দুর্বল। প্রথমে, তারা GIR 0AAশুরুতে মেলাতে সবচেয়ে কম সম্ভাব্য প্যাটার্ন বিকল্পটি রেখেছিল । এই পোস্টকোড বনাম অন্য যে কোনও পোস্টকোডের তুলনায় কতজন ব্যবহারকারী সম্ভবত এই পোস্টকোড পাবেন; সম্ভবত না? এর অর্থ প্রতিবার যখন রেজেক্স ব্যবহার করা হবে তখন পরবর্তী বিকল্পে এগিয়ে যাওয়ার আগে প্রথমে এই বিকল্পটি নিঃশেষ করা উচিত। কর্মক্ষমতা কীভাবে প্রভাবিত হয় তা দেখার জন্য অপশনগুলি (২২) উল্টিয়ে ফেলার পরে একই রেজেক্সের বিরুদ্ধে আসল রিজেক্স (35) কী পদক্ষেপ নিয়েছিল তা পরীক্ষা করে দেখুন ।

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

সমস্যা 6 - স্পেস

ব্যবহারের জন্য রেজেক্স দেখুন

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


উত্তর

1. যুক্তরাজ্য সরকারের রেজেক্স ঠিক করা

সমস্যা বিভাগে বর্ণিত সমস্ত সমস্যা সমাধান করা এবং প্যাটার্নটি সরলকরণের ফলে নিম্নলিখিতটি সংক্ষিপ্ততর, আরও সংক্ষিপ্ত নিদর্শন পাওয়া যায়। আমরা বেশিরভাগ গ্রুপগুলি সরিয়ে ফেলতে পারি যেহেতু আমরা পোস্টকোডকে সামগ্রিকভাবে স্বীকৃত করছি (স্বতন্ত্র অংশ নয়):

ব্যবহারের জন্য রেজেক্স দেখুন

^([A-Za-z][A-Ha-hJ-Yj-y]?[0-9][A-Za-z0-9]? ?[0-9][A-Za-z]{2}|[Gg][Ii][Rr] ?0[Aa]{2})$

যেকোন একটি ক্ষেত্রে (আপার বা লোয়ার কেস) থেকে সমস্ত ব্যাপ্তি সরিয়ে এবং কেস-সংবেদনশীল পতাকা ব্যবহার করে এটি আরও ছোট করা যেতে পারে। দ্রষ্টব্য : কিছু ভাষায় একটি নেই, তাই উপরের লম্বাটি ব্যবহার করুন। প্রতিটি ভাষা কেস-সংবেদনশীল পতাকাটি আলাদাভাবে প্রয়োগ করে।

ব্যবহারের জন্য রেজেক্স দেখুন

^([A-Z][A-HJ-Y]?[0-9][A-Z0-9]? ?[0-9][A-Z]{2}|GIR ?0A{2})$

অপেক্ষাকৃত ছোট আবার প্রতিস্থাপন [0-9]সঙ্গে \d(আপনার Regex ইঞ্জিন এটিকে সমর্থন করে তাহলে):

ব্যবহারের জন্য রেজেক্স দেখুন

^([A-Z][A-HJ-Y]?\d[A-Z\d]? ?\d[A-Z]{2}|GIR ?0A{2})$

সরলীকৃত প্যাটার্নস

নির্দিষ্ট বর্ণানুক্রমিক অক্ষরগুলি নিশ্চিত না করে, নিম্নলিখিতগুলি ব্যবহার করা যেতে পারে ( 1 থেকে সরলকরণগুলি মনে রাখবেন 1 যুক্তরাজ্য সরকারের রেজেক্সও এখানে প্রয়োগ করা হয়েছে):

ব্যবহারের জন্য রেজেক্স দেখুন

^([A-Z]{1,2}\d[A-Z\d]? ?\d[A-Z]{2}|GIR ?0A{2})$

এমনকি যদি আপনি বিশেষ কেসের বিষয়ে চিন্তা না করেন তবে GIR 0AA:

^[A-Z]{1,2}\d[A-Z\d]? ?\d[A-Z]{2}$

3. জটিল প্যাটার্নস

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

এখানে জটিল রেজেক্সেস রয়েছে যা 3 এর উপধারা অন্তর্ভুক্ত করে (3.1, 3.2, 3.3)।

প্যাটার্নগুলির সাথে সম্পর্কিত 1 the যুক্তরাজ্য সরকারের রেজেক্সকে ঠিক করা :

ব্যবহারের জন্য রেজেক্স দেখুন

^(([A-Z][A-HJ-Y]?\d[A-Z\d]?|ASCN|STHL|TDCU|BBND|[BFS]IQQ|PCRN|TKCA) ?\d[A-Z]{2}|BFPO ?\d{1,4}|(KY\d|MSR|VG|AI)[ -]?\d{4}|[A-Z]{2} ?\d{2}|GE ?CX|GIR ?0A{2}|SAN ?TA1)$

এবং 2 এর সাথে সম্পর্কিত সরলীকৃত প্যাটার্নস :

ব্যবহারের জন্য রেজেক্স দেখুন

^(([A-Z]{1,2}\d[A-Z\d]?|ASCN|STHL|TDCU|BBND|[BFS]IQQ|PCRN|TKCA) ?\d[A-Z]{2}|BFPO ?\d{1,4}|(KY\d|MSR|VG|AI)[ -]?\d{4}|[A-Z]{2} ?\d{2}|GE ?CX|GIR ?0A{2}|SAN ?TA1)$

৩.১ ব্রিটিশ বিদেশের অঞ্চল

উইকিপিডিয়া নিবন্ধে বর্তমানে বলা হয়েছে (কিছু ফর্ম্যাট কিছুটা সরল):

  • AI-1111: অ্যাঙ্গুইলা
  • ASCN 1ZZ: অ্যাসেনশন দ্বীপ
  • STHL 1ZZ: সেন্ট হেলেনা
  • TDCU 1ZZ: ত্রিস্তান দা কুনহা
  • BBND 1ZZ: ব্রিটিশ ভারত মহাসাগর অঞ্চল
  • BIQQ 1ZZ: ব্রিটিশ অ্যান্টার্কটিক অঞ্চল
  • FIQQ 1ZZ: ফকল্যান্ড দ্বীপপুঞ্জ
  • GX11 1ZZ: জিব্রাল্টার
  • PCRN 1ZZ: পিটকার্ন দ্বীপপুঞ্জ
  • SIQQ 1ZZ: দক্ষিণ জর্জিয়া এবং দক্ষিণ স্যান্ডউইচ দ্বীপপুঞ্জ
  • TKCA 1ZZ: টার্কস্ ও কেইকোস দ্বীপপুঞ্জ
  • BFPO 11: আকরোতিরি ও kelেকেলিয়া
  • ZZ 11এবং GE CX: বারমুডা ( এই নথি অনুসারে )
  • KY1-1111: কেম্যান দ্বীপপুঞ্জ ( এই নথি অনুসারে )
  • VG1111: ব্রিটিশ ভার্জিন দ্বীপপুঞ্জ ( এই নথি অনুসারে )
  • MSR 1111: মন্টসারেট ( এই নথি অনুসারে )

কেবলমাত্র ব্রিটিশ বিদেশের অঞ্চলগুলির সাথে মেলে এমন একটি সর্বনিম্ন রেগেক্সটি দেখতে দেখতে এটি দেখতে পারে:

ব্যবহারের জন্য রেজেক্স দেখুন

^((ASCN|STHL|TDCU|BBND|[BFS]IQQ|GX\d{2}|PCRN|TKCA) ?\d[A-Z]{2}|(KY\d|MSR|VG|AI)[ -]?\d{4}|(BFPO|[A-Z]{2}) ?\d{2}|GE ?CX)$

৩.২ ব্রিটিশ ফোর্সেস পোস্ট অফিস

যদিও তারা সম্প্রতি এটি পরিবর্তন করে ব্রিটিশ পোস্টকোড সিস্টেমের সাথে আরও ভালভাবে সারিবদ্ধ করার জন্য BF#(যেখানে #একটি সংখ্যার প্রতিনিধিত্ব করে), তারা alচ্ছিক বিকল্প পোস্টকোড হিসাবে বিবেচিত হয় । এই পোস্টকোডগুলি (সম্পাদনা) এর ফর্ম্যাটটি BFPOঅনুসরণ করে, 1-4 টি সংখ্যার পরে:

ব্যবহারের জন্য রেজেক্স দেখুন

^BFPO ?\d{1,4}$

৩.৩ সান্তা?

সান্তার সাথে আরও একটি বিশেষ কেস রয়েছে (যেমন অন্যান্য উত্তরে উল্লিখিত হয়েছে): SAN TA1একটি বৈধ পোস্টকোড। এর জন্য একটি রেজেেক্স খুব সহজ:

^SAN ?TA1$

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

2
দুর্দান্ত এবং পুঙ্খানুপুঙ্খ বিশ্লেষণ।
স্টিভ 15

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

ইউকে পোস্টকোড সিস্টেমের সাথে অনেকগুলি সমস্যা রয়েছে, কম্পিউটার যুগের আগে কমিটির দ্বারা স্পষ্টতই এটি তৈরি হয়েছিল, তবে পরিবর্তনশীল দৈর্ঘ্য এবং স্পেসের বিষয়টি সবচেয়ে মারাত্মক। আমি E1 5JX এর মতো প্যাডিং পোস্টকোড সহ E1 5JX, অর্থাৎ তিনটি স্পেস সহ সমস্ত ধরণের ভয়াবহতা দেখেছি, যাতে এটি এক্সেলে SW18 5HA এর সাথে সুন্দরভাবে সারিবদ্ধ হয় (অ্যাড্রেসগুলি পরিচালনার জন্য পছন্দ মতো ঘৃণ্যভাবে অনুপযুক্ত সফ্টওয়্যার সন্নিবেশ করে)। আইএমএইচওর একমাত্র বুদ্ধিমান সমাধান হ'ল সমস্ত স্থান ফাঁকা করে দেওয়া, যাতে পোস্টকোডটি ইলাস্টিক, সোলার, পোস্টগ্রিস ইত্যাদির কাছাকাছি কোথাও যাওয়ার আগে একক স্ট্রিং হয়ে যায়
জন পাওয়েল

45

বিস্তৃত ইউকে পোস্টকোড নিয়মিত প্রকাশের মতো জিনিস নেই যা কোনও পোস্টকোডকে বৈধতা দিতে সক্ষম । আপনি নিয়মিত এক্সপ্রেশন ব্যবহার করে কোনও পোস্টকোড সঠিক ফর্ম্যাটে রয়েছে তা পরীক্ষা করতে পারেন; এটি আসলে বিদ্যমান না।

পোস্টকোডগুলি নির্বিচারে জটিল এবং ক্রমাগত পরিবর্তিত হয়। উদাহরণস্বরূপ, আউটকোডে W1প্রতিটি পোস্টকোড অঞ্চলের জন্য 1 এবং 99 এর মধ্যে প্রতিটি সংখ্যা থাকে না এবং হতে পারে না।

বর্তমানে যা আছে তা চিরকাল সত্য হতে পারে তা আপনি আশা করতে পারবেন না। উদাহরণস্বরূপ, ১৯৯০ সালে পোস্ট অফিস সিদ্ধান্ত নিয়েছিল যে অ্যাবারডিন কিছুটা ভিড় করছে। তারা AB1-5 এর শেষে এটি 0-এ 0 যুক্ত করেছে এবং এটি এফ 10-50 তৈরি করে এবং এরপরে বেশ কয়েকটি পোস্টকোড তৈরি করেছে।

যখনই কোনও নতুন রাস্তা তৈরি হয় তখনই একটি নতুন পোস্টকোড তৈরি হয়। এটি নির্মাণের অনুমতি পাওয়ার প্রক্রিয়ার অংশ; স্থানীয় কর্তৃপক্ষ পোস্ট অফিসের সাথে এটি আপডেট রাখতে বাধ্য (তারা সব করেন না)।

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

তারপরে, বিএফপিও পোস্টকোড রয়েছে, যা এখন আরও মানক বিন্যাসে পরিবর্তিত হচ্ছে । উভয় ফর্ম্যাট বৈধ হতে চলেছে। শেষ অবধি, বিদেশের অঞ্চল সোর্স উইকিপিডিয়া রয়েছে

+ + ---------- + + -------------------------------------- -------- + +
| পোস্টকোড | অবস্থান |
+ + ---------- + + -------------------------------------- -------- + +
| এআই -2640 | অ্যাঙ্গুইলা |
| এএসসিএন 1 জেডজেড | অ্যাসেনশন দ্বীপ |
| এসটিএইচএল 1 জেডজেড | সেন্ট হেলেনা |
| টিডিসিইউ 1 জেডজেড | ত্রিস্তান দা কুনহা |
| বিবিএনডি 1 জেডজেড | ব্রিটিশ ভারত মহাসাগর অঞ্চল |
| BIQQ 1ZZ | ব্রিটিশ অ্যান্টার্কটিক অঞ্চল |
| FIQQ 1ZZ | ফকল্যান্ড দ্বীপপুঞ্জ |
| জিএক্স 11 1 এএ | জিব্রাল্টার |
| পিসিআরএন 1 জেডজেড | পিটকার্ন দ্বীপপুঞ্জ |
| এসআইকিউকিউ 1 জেডজেড | দক্ষিণ জর্জিয়া এবং দক্ষিণ স্যান্ডউইচ দ্বীপপুঞ্জ |
| টি কেসিএ 1 জেডজেড | টার্কস এবং কাইকোস দ্বীপপুঞ্জ |
+ + ---------- + + -------------------------------------- -------- + +

এরপরে, আপনাকে অ্যাকাউন্টে নিতে হবে যে যুক্তরাজ্য তার পোস্টকোড সিস্টেমটিকে বিশ্বের অনেক জায়গায় "রফতানি করেছে"। যে কোনও কিছু যা "ইউকে" পোস্টকোডকে বৈধ করে তোলে তা অন্যান্য অনেক দেশের পোস্টকোডকেও বৈধতা দেয়।

আপনি যদি কোনও ইউকে পোস্টকোডকে বৈধতা দিতে চান তবে এটি করার সবচেয়ে নিরাপদ উপায় হ'ল বর্তমান পোস্টকোডগুলির চেহারা। বিকল্প একটি সংখ্যা আছে:

  • অর্ডানেন্স জরিপ একটি মুক্ত তথ্য লাইসেন্সের আওতায় কোড-পয়েন্ট ওপেন প্রকাশ করে। এটি সময়ের চেয়ে কিছুটা পিছনে থাকবে তবে এটি বিনামূল্যে। এটি (সম্ভবত - আমি মনে করতে পারি না) উত্তর আইরিশ ডেটা অন্তর্ভুক্ত করবে না কারণ অর্ডানেন্স জরিপের কোনও রেমিট নেই। উত্তর আয়ারল্যান্ডে ম্যাপিং উত্তর আয়ারল্যান্ডের অর্ডানেন্স জরিপ দ্বারা পরিচালিত হয় এবং তাদের তাদের পৃথক, অর্থ প্রদানের জন্য, পয়েন্টার পণ্য থাকে। আপনি এটি ব্যবহার করতে পারেন এবং বেশ কয়েকটি সহজে জুড়ে না এমন কয়েকটি সংযোজন করতে পারেন।

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

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


চেহারাটি আকর্ষণীয় শোনাচ্ছে
সুপারউবারডুপার

2
এই বিকল্পটি উত্তরটি খুঁজছিল না, তবে এটি সম্ভবত সবচেয়ে কার্যকর। এটি আমার যে চেকিং নিয়মগুলি করতে চলেছে তা শিথিল করতে উত্সাহিত করবে।
জন হান্ট

22

উপরের উত্তরগুলির কয়েকটি আমার নজর ছিল এবং আমি @ ড্যানের উত্তর (সি। 15 ডিসেম্বর '10) থেকে প্যাটার্নটি ব্যবহার করার বিরুদ্ধে পরামর্শ দেব , যেহেতু এটি প্রায় 0.4% বৈধ পোস্টকোডকে ভুল হিসাবে পতাকাঙ্কিত করে, অন্যগুলি না করে ।

অর্ডানেন্স জরিপ কোড পয়েন্ট ওপেন নামে পরিচিত পরিষেবা সরবরাহ করে যা:

গ্রেট ব্রিটেনের বর্তমান সমস্ত পোস্টকোড ইউনিটের একটি তালিকা রয়েছে

আমি এই ডেটা ব্যবহার করে পোস্টকোডের সম্পূর্ণ তালিকার (6 জুলাই '13) এর বিপরীতে উপরের প্রতিটি রেগেক্সকে দৌড়েছি grep:

cat CSV/*.csv |
    # Strip leading quotes
    sed -e 's/^"//g' |
    # Strip trailing quote and everything after it
    sed -e 's/".*//g' |
    # Strip any spaces
    sed -E -e 's/ +//g' |
    # Find any lines that do not match the expression
    grep --invert-match --perl-regexp "$pattern"

এখানে মোট 1,686,202 টি পোস্টকোড রয়েছে।

নিম্নলিখিত বৈধ পোস্টকোডগুলির সংখ্যা যা প্রতিটিটির সাথে মেলে না$pattern :

'^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]?[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$'
# => 6016 (0.36%)
'^(GIR ?0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]([0-9ABEHMNPRV-Y])?)|[0-9][A-HJKPS-UW]) ?[0-9][ABD-HJLNP-UW-Z]{2})$'
# => 0
'^GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|BX|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\d{1,4}$'
# => 0

অবশ্যই, এই ফলাফলগুলি বৈধ পোস্টকোডগুলি নিয়েই ডিল করে যা ভুলভাবে অবৈধ হিসাবে চিহ্নিত করা হয়েছে। তাই:

'^.*$'
# => 0

আমি অবৈধ পোস্টকোডগুলি ফিল্টার করার ক্ষেত্রে কোন প্যাটার্নটি সেরা তা সম্পর্কে কিছুই বলছি না।


1
আমার উত্তরে আমি যা বলেছি এটি কি তা নয় এবং আপনি যদি অসমর্থিত পথে নামাচ্ছেন তবে আপনার সম্ভবত সেগুলি করা উচিত এবং যদি কেউ তাদের উত্তর পরিবর্তন করে তবে তা আপডেট রাখুন? যদি তা না হয় তবে অন্তত আপনি যে উত্তরটি নিয়েছিলেন তার শেষ সম্পাদনার তারিখটি উল্লেখ করুন যাতে লোকেরা দেখতে পাবে যে এটির পরে পরিবর্তন হয়েছে কিনা।
বেন

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

17
^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$

বৈধ ইউকে পোস্টকোডগুলির সাথে মেলে নিয়মিত প্রকাশ। ইউকে ডাক সিস্টেমে সমস্ত অক্ষর সমস্ত পজিশনে ব্যবহৃত হয় না (যানবাহনের নিবন্ধকরণ প্লেটগুলির সাথে একই) এবং এটি পরিচালনা করার জন্য বিভিন্ন বিধি রয়েছে। এই রেজেক্স সেই নিয়মগুলিকে বিবেচনা করে। নিয়মগুলির বিশদ: পোস্টকোডের প্রথম অর্ধের বৈধ ফর্ম্যাটগুলি [এজেড] [এজেড] [০-৯] [এজেড] [এজেড] [এজেড] [০-৯] [০-৯] [এজেড] [০-৯] [ 0-9] [এজেড] [এজেড] [০-৯] [এজেড] [এজেড] [এজেড] [এজেড] [০-৯] [এজেড] [এজেড] [০-৯] ব্যতিক্রম অবস্থান - প্রথম। সংশ্লেষ - কিউভিএক্স ব্যবহার করা হয়নি অবস্থান - দ্বিতীয়। কনট্রেন্ট - আইআইজেড GIR 0AA পজিশন ব্যতীত ব্যবহৃত হয় না - তৃতীয়। প্রতিবন্ধকতা - AEHMNPRTVXY কেবলমাত্র পজিশন - ফোরথ ব্যবহার করেছে। কনট্রেন্ট - ABEHMNPRVWXY পোস্টকোড বৈধ ফর্ম্যাটগুলির দ্বিতীয়ার্ধ [0-9] [এজেড] [এজেড] ব্যতিক্রম অবস্থান - দ্বিতীয় এবং তৃতীয়। প্রতিরোধ - CIKMOV ব্যবহার করা হয়নি

http://regexlib.com/REDetails.aspx?regexp_id=260


1
লোকেরা কেন এই উত্তরটিকে অগ্রাহ্য করেছে - কিছুই ঠিক নেই - এটি সঠিক রেজেক্স
অলি

রেজেক্স জাভস্ক্রিপ্টে ডাক কোড "YO31" এবং "YO31 1" এর জন্য কাজ করে না।
প্রতীক খাদলোয়া

9
আমি এটিকে সঠিক বলে মনে করি না, যেহেতু প্রদত্ত রেইজেক্স বর্ণনার সাথে বিরোধিতা করে এবং প্রস্তাব দেয় যে আপনি যে পোস্টকোড দিয়ে শুরু করতে পারেন 0-9, যা আপনি পারবেন না
লুইজি প্লিঞ্জ

4
এই রেজেক্সটি প্রায় 6000 বৈধ পোস্টকোডে ব্যর্থ হয়, তাই আমি এর বিরুদ্ধে সুপারিশ করব। আমার উত্তর দেখুন ।
রিচার্ড টাওয়ার্স

এটি ছোট হাতের কোনও পোস্টকোডে বা আমার জন্য কোনও স্থান ব্যর্থ হয়
নর্তকী

14

এই উইকিপিডিয়া টেবিল অনুযায়ী

এখানে চিত্র বর্ণনা লিখুন

এই প্যাটার্নটি সমস্ত কেস কভার করে

(?:[A-Za-z]\d ?\d[A-Za-z]{2})|(?:[A-Za-z][A-Za-z\d]\d ?\d[A-Za-z]{2})|(?:[A-Za-z]{2}\d{2} ?\d[A-Za-z]{2})|(?:[A-Za-z]\d[A-Za-z] ?\d[A-Za-z]{2})|(?:[A-Za-z]{2}\d[A-Za-z] ?\d[A-Za-z]{2})

অ্যান্ড্রয়েড \ জাভা ব্যবহার করার সময় এটি ব্যবহার করুন। D


আমি এটি সর্বাধিক পঠনযোগ্য উত্তর খুঁজে পেয়েছি, যদিও এটি gov.uk ওয়েবসাইট থেকে তথ্য গ্রহণ করে এমন সমাধানগুলির ভিত্তিতে প্রকৃত বৈধ কোডগুলির চেয়ে কেবল একটি পোস্টকোডের ফর্মের সন্ধান করে, তবে এটি আমার ব্যবহারের ক্ষেত্রে যথেষ্ট। এটির সাথে কিছুটা খেলার পরে (অজগরতে), আমি এটিকে আরও কিছুটা কমপ্যাক্ট তবে সমমানের রেইজেক্সে সজ্জিত করে যা একটি alচ্ছিক স্থানের জন্যও অনুমতি দেয়: ([a-zA-Z] (?: (??: [A-zA- জেড] \ ঘ [zA-জেড]) | (: \ ঘ {1,2}) | (:?? [zA-জেড] \ ঘ {1,2})) \ ডব্লিউ [0 -9] [a-zA-Z] {2})
রিচার্ড জে

14

এখানে আমার বেশিরভাগ উত্তর আমার ডাটাবেসে থাকা সমস্ত পোস্টকোডের জন্য কাজ করে না। অবশেষে আমি এমন একটিকে পেয়েছি যা সকলের সাথে বৈধতা দেয়, সরকার প্রদত্ত নতুন রেজেক্স ব্যবহার করে:

https://www.gov.uk/government/uploads/system/uploads/attachment_data/file/413338/Bulk_Data_Transfer_-_additional_validation_valid_from_March_2015.pdf

এটি পূর্বের কোনও উত্তরের মধ্যে নেই সুতরাং তারা লিঙ্কটি নীচে নেওয়ার ক্ষেত্রে আমি এখানে এটি পোস্ট করি:

^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$

আপডেট: জেমি বুল দ্বারা নির্দেশিত হিসাবে আপডেট করা রেজেক্স x নিশ্চিত না যে এটি অনুলিপি করার ক্ষেত্রে আমার ত্রুটি ছিল বা এটি সরকারের রেজেক্সে একটি ত্রুটি ছিল, লিঙ্কটি এখন নিচে ...

আপডেট: ctwheels হিসাবে পাওয়া গেছে, এই রেজেক্সটি জাভাস্ক্রিপ্ট রিজেক্স গন্ধের সাথে কাজ করে। পিসি (পিএইচপি) গন্ধের সাথে কাজ করে এমন একজনের জন্য তার মন্তব্য দেখুন।


1
^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$হওয়া উচিত ^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$- পার্থক্যটি স্পট করুন ;-)
জেমি বুল

1
চিহ্নিত করা! আমার উত্তর আপডেট। ধন্যবাদ!
জেসুস Carrera

2
এটিই এখানে কেবলমাত্র উত্তর যা regexr.com এবং নোটপ্যাড ++ এ কাজ করেছে । যদিও, আমি এটি পরিবর্তন করেছি ([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) ?[0-9][A-Za-z]{2})(সরানো ^এবং স্থানের পরে $একটি যোগ ?করে) regexr.com এর জন্য একাধিক ফলাফল এবং উভয়ের পক্ষে এমন ফলাফল খুঁজে পেতে যেটির সাথে স্পেস সিপারেটর নেই।
mythofechelon

@ctwheels এই রেজেক্সটি জাভাস্ক্রিপ্ট স্বাদে। যদি আপনার ব্যর্থ লিঙ্কে জাভাস্ক্রিপ্ট নির্বাচন করেন তবে এটি কার্যকর হবে। এটি দুর্দান্ত ধরা এবং আমি আমার উত্তর আপডেট করব।
জেসেস ক্যারিরা

1
ডকুমেন্টেশনে পোস্ট করা রেজেক্স সহজাতভাবে ভুল। পুরো এক্সপ্রেশনটি একটি নন-ক্যাপচারিং গ্রুপে আবৃত করা উচিত (?:)এবং তারপরে তার চারপাশে অ্যাঙ্করগুলি রাখা উচিত। এখানে এটি ব্যর্থ দেখুন । আরও তথ্যের জন্য, আমার উত্তর এখানে দেখুন^(?:([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2}))$সংশোধন করা নিয়মিত অভিব্যক্তি।
ctwheels

12

একটি পুরাতন পোস্ট তবে এখনও গুগলের ফলাফলগুলিতে বেশ উচ্চতর তাই ভেবেছিলাম আমি আপডেট করব। এই 14 অক্টোবর ডক ইউকে পোস্টকোড নিয়মিত প্রকাশের সংজ্ঞা দেয়:

^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([**AZ**a-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$

থেকে:

https://www.gov.uk/government/uploads/system/uploads/attachment_data/file/359448/4__Bulk_Data_Transfer_-_additional_validation_valid.pdf

দলিলটি এর পিছনে যুক্তিও ব্যাখ্যা করে। যাইহোক, এটিতে একটি ত্রুটি রয়েছে (সাহসী) এবং লোয়ার কেসগুলিকেও অনুমতি দেয় যা আইনী যদিও স্বাভাবিক নয়, তাই সংশোধিত সংস্করণ:

^(GIR 0AA)|((([A-Z][0-9]{1,2})|(([A-Z][A-HJ-Y][0-9]{1,2})|(([A-Z][0-9][A-Z])|([A-Z][A-HJ-Y][0-9]?[A-Z])))) [0-9][A-Z]{2})$

এটি লন্ডনের নতুন পোস্টকোডগুলির সাথে কাজ করে (যেমন ডাব্লু 1 ডি 5 এলএইচ) যা পূর্ববর্তী সংস্করণগুলি নয়।


দেখে মনে হচ্ছে যে আপনি যে ত্রুটিটি গা bold়ভাবে হাইলাইট করেছেন তা নথিতে স্থির হয়ে গেছে তবে আমি আপনার নিয়মিত অভিব্যক্তিটি আরও সহজভাবে পড়া পছন্দ করি।
প্রোগ্রামিংয়ের অধ্যাপক

5
আমি কেবলমাত্র এটিই বলব যে স্থানটি \ s এ পরিবর্তন করে স্থানকে alচ্ছিক করে তুলুন? পাঠযোগ্যতার জন্য স্থানটির প্রয়োজন হয় না।
প্রোগ্রামিংয়ের প্রফেসর

ডকুমেন্টেশনে পোস্ট করা রেজেক্স সহজাতভাবে ভুল। পুরো এক্সপ্রেশনটি একটি নন-ক্যাপচারিং গ্রুপে আবৃত করা উচিত (?:)এবং তারপরে তার চারপাশে অ্যাঙ্করগুলি রাখা উচিত। এখানে এটি ব্যর্থ দেখুন । আরও তথ্যের জন্য, আমার উত্তর এখানে দেখুন^(?:([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2}))$সংশোধন করা নিয়মিত অভিব্যক্তি।
ctwheels

10

গুগল তাদের i18napis.appspot.com ডোমেইনে পরিবেশন করে :

GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|BX|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\d{1,4}

10

পোস্টকোডগুলি পরিবর্তন সাপেক্ষে, এবং একটি পোস্টকোড যাচাইয়ের একমাত্র আসল উপায় হ'ল পোস্টকোডগুলির সম্পূর্ণ তালিকা থাকে এবং এটি সেখানে আছে কিনা তা দেখুন।

তবে নিয়মিত প্রকাশগুলি কার্যকর কারণ তারা:

  • ব্যবহার এবং প্রয়োগ করা সহজ
  • সংক্ষিপ্ত
  • দ্রুত চালানো হয়
  • রক্ষণাবেক্ষণ করা বেশ সহজ (পোস্টকোডের সম্পূর্ণ তালিকার তুলনায়)
  • এখনও বেশিরভাগ ইনপুট ত্রুটিগুলি ধরুন catch

তবে নিয়মিত প্রকাশগুলি বজায় রাখা কঠিন হয়ে পড়ে, বিশেষত এমন কেউ যার জন্য এটি প্রথমে আসে নি। সুতরাং এটি হতে হবে:

  • যতটা সম্ভব বুঝতে সহজ
  • তুলনামূলকভাবে ভবিষ্যতের প্রমাণ

তার মানে এই যে উত্তরটির বেশিরভাগ নিয়মিত অভিব্যক্তি যথেষ্ট ভাল নয়। উদাহরণস্বরূপ আমি দেখতে পাচ্ছি যে [A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRV-Y]এএ 1 এ ফর্মের একটি পোস্টকোড ক্ষেত্রটি মিলছে - তবে এটি কোনও ঘাড়ে ব্যথা হতে চলেছে যদি এবং কখন একটি নতুন পোস্টকোড অঞ্চল যুক্ত হয়, কারণ এটি কোন পোস্টকোড অঞ্চলগুলির সাথে মেলে তা বোঝা মুশকিল।

আমিও চাই যে আমার নিয়মিত প্রকাশটি পোস্টকোডের প্রথম এবং দ্বিতীয়ার্ধটি প্রথম বন্ধনী হিসাবে মিলিত হোক match

সুতরাং আমি এটি নিয়ে এসেছি:

(GIR(?=\s*0AA)|(?:[BEGLMNSW]|[A-Z]{2})[0-9](?:[0-9]|(?<=N1|E1|SE1|SW1|W1|NW1|EC[0-9]|WC[0-9])[A-HJ-NP-Z])?)\s*([0-9][ABD-HJLNP-UW-Z]{2})

পিসিআরই ফর্ম্যাটে এটি নীচে লেখা যেতে পারে:

/^
  ( GIR(?=\s*0AA) # Match the special postcode "GIR 0AA"
    |
    (?:
      [BEGLMNSW] | # There are 8 single-letter postcode areas
      [A-Z]{2}     # All other postcode areas have two letters
      )
    [0-9] # There is always at least one number after the postcode area
    (?:
      [0-9] # And an optional extra number
      |
      # Only certain postcode areas can have an extra letter after the number
      (?<=N1|E1|SE1|SW1|W1|NW1|EC[0-9]|WC[0-9])
      [A-HJ-NP-Z] # Possible letters here may change, but [IO] will never be used
      )?
    )
  \s*
  ([0-9][ABD-HJLNP-UW-Z]{2}) # The last two letters cannot be [CIKMOV]
$/x

আমার পক্ষে এটি যথাসম্ভব বৈধতা দেওয়ার মধ্যে সঠিক ভারসাম্য, একই সময়ে ভবিষ্যত-প্রুফিং এবং সহজ রক্ষণাবেক্ষণের অনুমতি দেওয়া।


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

1
@Jon এটি মিলে যায় যখন অন্যান্য অক্ষরের সূচনা বা সমাপ্তি যেমন সংযোজন করছে aSW1A 1AAasfgআমার জন্য মিলেছে (আমি না downvote যদিও মনে হয় এটিকে সহজে সংশোধন করা যেতে পারে হয়নি)
decvalts

9

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

রেজেক্স এবং কিছু সাধারণ পোস্টকোড চেক করে পিএইচপি কোড নীচে পোস্ট করা হয়েছে। দ্রষ্টব্য: - এটি নিম্ন বা বড় হাতের পোস্টকোড এবং জিআইআর 0 এএ বিযুক্তির সাথে অনুমতি দেয় তবে সম্ভবত প্রবেশের পোস্টকোডের মাঝখানে কোনও জায়গার উপস্থিতি পরীক্ষার আগে স্থান অপসারণের জন্য সরল স্ট্র_রেপ্লেস ব্যবহার করে likely রেজেক্সের বিরুদ্ধে এর বাইরে যে কোনও ত্রুটি এবং রয়্যাল মেল নিজেই তাদের সাহিত্যে সেগুলি উল্লেখ করে না (দেখুন http://www.royalmail.com/sites/default/files/docs/pdf/programmers_guide_edition_7_v5.pdf এবং পৃষ্ঠা 17 থেকে পড়া শুরু করুন ) !

দ্রষ্টব্য: রয়্যাল মেলের নিজস্ব সাহিত্যে (উপরের লিঙ্কে) তৃতীয় এবং চতুর্থ অবস্থানের চারপাশে কিছুটা অস্পষ্টতা রয়েছে এবং এই অক্ষরগুলি হ'ল যদি অক্ষর থাকে place এটি পরিষ্কার করার জন্য আমি সরাসরি রয়্যাল মেইলের সাথে যোগাযোগ করেছি এবং তাদের নিজস্ব কথায় "আনা এনএএ ফর্ম্যাটযুক্ত বাহ্যিক কোডের চতুর্থ অবস্থানে একটি চিঠির কোনও ব্যতিক্রম নেই এবং তৃতীয় অবস্থান ব্যতিক্রম কেবলমাত্র বহির্মুখী কোডের শেষ চিঠির সাথে প্রযোজ্য এএনএ এনএএ ফর্ম্যাট করুন " সোজা ঘোড়া মুখ থেকে!

<?php

    $postcoderegex = '/^([g][i][r][0][a][a])$|^((([a-pr-uwyz]{1}([0]|[1-9]\d?))|([a-pr-uwyz]{1}[a-hk-y]{1}([0]|[1-9]\d?))|([a-pr-uwyz]{1}[1-9][a-hjkps-uw]{1})|([a-pr-uwyz]{1}[a-hk-y]{1}[1-9][a-z]{1}))(\d[abd-hjlnp-uw-z]{2})?)$/i';

    $postcode2check = str_replace(' ','',$postcode2check);

    if (preg_match($postcoderegex, $postcode2check)) {

        echo "$postcode2check is a valid postcode<br>";

    } else {

        echo "$postcode2check is not a valid postcode<br>";

    }

?>

আমি আশা করি এটি সমাধানের সন্ধানে এই থ্রেড জুড়ে আসা অন্য যে কোনও ব্যক্তিকে সহায়তা করবে।


1
আমি জানতে আগ্রহী হয়ে উঠছি কোন পোস্টকোড প্রকাশিতটিতে ব্যর্থ হয়েছিল?
জাফ - বেন ডুগইড

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

শীর্ষস্থানীয়দের জন্য ধন্যবাদ - আমি দেখতে পাচ্ছি যে "পি" তৃতীয় অবস্থানে (আপনার লিঙ্কযুক্ত ডক্টর থেকে) গ্রহণযোগ্য হিসাবে যুক্ত হয়েছে বলে মনে হয়, তবে প্রশ্ন নয় - তবে আপনি কোথায় পড়ছেন যে "চতুর্থ অবস্থান সমস্ত অক্ষরের অনুমতি দেয়"? যতদূর আমি দেখতে পাচ্ছি ডকটি "সামনের অবস্থান" উল্লেখ করেনি, তাই আমি "বাস্তব অবস্থান নির্বিশেষে তৃতীয় চিঠি" হিসাবে পড়েছি।
phাফ - বেন ডুগুইড

1
সবেমাত্র রয়্যাল মেল সমর্থনকারী দলের কাছ থেকে কথাটি এসেছে এবং আমার বিধিগুলির ব্যাখ্যা স্পষ্টতই সঠিক। বাহ্যিক কোডের চতুর্থ অবস্থানে একটি চিঠির (যেমন এএনএ এনএএ) কোনও ব্যতিক্রম নেই এবং তৃতীয় অবস্থান ব্যতিক্রম কেবলমাত্র শেষ চিঠির ক্ষেত্রে প্রযোজ্য (যেমন এএনএ এনএএ)। সোজা ঘোড়া মুখ থেকে.
ড্যান সোলো

1
@DanSolo এই Regex একটি বৈধ পোস্টকোড প্রথমার্ধে অভ্যন্তরস্থ কোড উদাঃ নিখোঁজ একটি সত্য ম্যাচ ফিরে আসবে SW1Aবা BD25(অথবা অন্তত এটা আমার জন্য যা করেছিলেন) ছাড়া দ্বিতীয়ার্ধে
decvalts

7

এখানে নথিগুলিতে বর্ণিত ফর্ম্যাটের ভিত্তিতে একটি রেজেক্স রয়েছে যা মার্কজের উত্তরের সাথে লিঙ্কযুক্ত:

/^[A-Z]{1,2}[0-9][0-9A-Z]? ?[0-9][A-Z]{2}$/

চশমাগুলির মধ্যে কেবলমাত্র পার্থক্য হ'ল চশমা অনুসারে শেষ 2 টি অক্ষর [CIKMOV] এ থাকতে পারে না।

সম্পাদনা করুন: এখানে আরও একটি সংস্করণ রয়েছে যা চরিত্রের সীমাবদ্ধতার জন্য পরীক্ষা করে।

/^[A-Z]{1,2}[0-9][0-9A-Z]? ?[0-9][A-BD-HJLNP-UW-Z]{2}$/

কেবল স্বীকৃতি দেওয়ার চেয়ে ইউকে পোস্টকোডে আরও অনেক জটিলতা রয়েছে A-Z- Qএটি কখনই অনুমোদিত নয়, Vকেবল অল্প পরিমাণে ব্যবহৃত হয় ইত্যাদি চরিত্রের অবস্থানের উপর নির্ভর করে।
phাফ - বেন দুগুয়েড

2
আপনি যা চান সেটি একটি সিনট্যাক্স চেক হলে এটি অপ্রাসঙ্গিক হতে পারে। অন্য অনেকে যেমন মন্তব্য করেছেন, কেবলমাত্র একটি আপ-টু-ডেট ডাটাবেসের একটি অনুসন্ধান প্রায় সঠিক হয়ে যায় এবং তারপরেও ডাটাবেসটি কতটা আপ-টু ডেট তা নিয়ে সমস্যা রয়েছে। সুতরাং, আমার জন্য, এই সিনট্যাক্স পরীক্ষক রেজেক্স পরিষ্কার, সহজ এবং দরকারী।
রিক -777

5

উপরের কয়েকটি রেগেক্স কিছুটা নিয়ন্ত্রক। জেনুইন পোস্টকোডটি নোট করুন: "ডাব্লু 1 কে 7 এএ" "পজিশন 3 - এইএইচএমএনপিআরটিভিএক্সওয়াই শুধুমাত্র উপরে" কে "হিসাবে ব্যবহৃত হবে" এই নিয়মটি ব্যর্থ হবে allow

রেজেক্স:

^(GIR 0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKPS-UW])[0-9][ABD-HJLNP-UW-Z]{2})$

খানিকটা নির্ভুল বলে মনে হচ্ছে, উইকিপিডিয়া নিবন্ধটি দেখুন 'যুক্তরাজ্যের পোস্টকডস' শিরোনাম

মনে রাখবেন যে এই রেজেক্সের কেবল বড় হাতের অক্ষর প্রয়োজন।

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


দেখে মনে হচ্ছে পোস্ট অফিসটি চলে গেছে তবে সরকার কিছুটা পিছিয়ে রয়েছে :(
জাফ - বেন ডুগইড

4
আমি এটি ব্যবহার করি: "^ ([জিজি] [আইআই] [আরআর] 0 [এএ] {2}) | ((([এ-জা-জেড]] [0-9] {1,2}) | ((( [ZA-z- র] [এ-হা-HJ-YJ-Y] [0-9] {1,2}) | (([ZA-z- র] [0-9] [ZA-z- র ]) | ([এ-জা-জেড] [এ-হা-এইচজে-ইজে-ই] [০-৯]? [এ-জা-জেড]))) {0,1} [0-9] [ এ-জা-জেড] {2}) $ "আমি এটি পছন্দ করি কারণ এটি উচ্চ এবং নিম্নতর ক্ষেত্রে অনুমতি দেয় এবং স্থানটি alচ্ছিক করে তোলে - ব্যবহারের পক্ষে আরও ভাল, যদি 100% সঠিক না হয়!
বিগটিভি

4

এখানে আমরা যুক্তরাজ্যের পোস্টকোড ইস্যুটির সাথে কীভাবে আচরণ করছি:

^([A-Za-z]{1,2}[0-9]{1,2}[A-Za-z]?[ ]?)([0-9]{1}[A-Za-z]{2})$

ব্যাখ্যা:

  • 1 বা 2 এজে চার্স, উচ্চ বা নিম্ন জরিমানা আশা করুন
  • 1 বা 2 সংখ্যা আশা
  • 0 বা 1 অ্যাজ চর, উপরের বা নিম্ন জরিমানা আশা করুন
  • alচ্ছিক স্থান অনুমোদিত
  • 1 নম্বর আশা
  • 2 আজে, উপরের বা নিম্ন জরিমানা আশা

এটি সর্বাধিক ফর্ম্যাটগুলি পায়, তারপরে আমরা পোস্টকোডটি আসল কিনা তা যাচাই করার জন্য ডিবি ব্যবহার করি, এই ডেটা ওপেনপয়েন্ট https://www.ordnanceurvey.co.uk/opendatadownload/products.html দ্বারা চালিত

আশাকরি এটা সাহায্য করবে


এটি ফর্ম্যাটটিকে অনুমতি দেয় AANNA NAAযা অবৈধ।
ctwheels

সুতরাং উত্তরের অংশটি 'এটি সর্বাধিক ফর্ম্যাটগুলি পায়'। :)
অ্যালেক্স স্টিফেনস

4

সাধারণ নিয়ম:

^[A-Z]{1,2}[0-9R][0-9A-Z]? [0-9][ABD-HJLNP-UW-Z]{2}$

যুক্তরাজ্যের ডাক কোডগুলি (বা ডাককোডগুলি, যেমন তারা বলা হয়) একটি স্পেস দ্বারা পৃথক পৃথক পাঁচ থেকে সাতটি বর্ণমালার অক্ষর দ্বারা গঠিত। নির্দিষ্ট অবস্থানগুলিতে কোন অক্ষরগুলি উপস্থিত হতে পারে তার প্রচ্ছদগুলির বিধিগুলি জটিল এবং ব্যতিক্রমগুলি দ্বারা পরিপূর্ণ। স্রেফ প্রদর্শিত নিয়মিত প্রকাশটি বুনিয়াদি বিধিগুলিকে আটকে দেয়।

সম্পূর্ণ নিয়ম:

আপনার যদি এমন একটি রেইজেক্সের প্রয়োজন হয় যা পাঠযোগ্যতার ব্যয়ে পোস্টকোড নিয়মের জন্য সমস্ত বাক্স টিক করে, আপনি এখানে যান:

^(?:(?:[A-PR-UWYZ][0-9]{1,2}|[A-PR-UWYZ][A-HK-Y][0-9]{1,2}|[A-PR-UWYZ][0-9][A-HJKSTUW]|[A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRV-Y]) [0-9][ABD-HJLNP-UW-Z]{2}|GIR 0AA)$

সূত্র: https://www.saffibooksonline.com/library/view/regular-expressions-cookbook/9781449327453/ch04s16.html

আমাদের গ্রাহকদের ডাটাবেসের বিরুদ্ধে পরীক্ষিত এবং পুরোপুরি নির্ভুল বলে মনে হচ্ছে।


4

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

([A-PR-UWYZ]([A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y])?|[0-9]([0-9]|[A-HJKPSTUW])?) ?[0-9][ABD-HJLNP-UW-Z]{2})

এটি ধরে নেওয়া হয় যে পোস্টকোডটি বড় হাতের অক্ষরে রূপান্তরিত হয়েছে এবং এর নেতৃত্ব বা অগ্রবর্তী অক্ষর নেই, তবে আউটকোড এবং ইনকোডের মধ্যে একটি alচ্ছিক স্থান গ্রহণ করবে।

বিশেষ "GIR0 0AA" পোস্টকোডটি বাদ দেওয়া হয়েছে এবং এটি পোস্টকোডের অফিসিয়াল পোস্ট অফিসের তালিকায় নেই এবং এটি যতক্ষণ জানি আমি নিবন্ধিত ঠিকানা হিসাবে ব্যবহার করব না তাই এটি বৈধ হবে না। এটি যুক্ত করা বিশেষ প্রয়োজন হিসাবে তুচ্ছ হওয়া উচিত।


4

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

/^([a-z0-9]\s*){5,8}$/i

এটি "L1 8JQ" এর মতো সংক্ষিপ্ততম পোস্টকোডের পাশাপাশি "ওয়াল 145ET" এর মতো দীর্ঘতম পোস্টকোডকে মঞ্জুরি দেয়।

যেহেতু এটি 8 টি অক্ষর পর্যন্ত অনুমতি দেয়, স্থান না থাকলে এটি 8 টি অক্ষর পোস্টকোডকেও অনুমতি দেবে: "ওল 145ETX"। তবে আবার, এটি একটি সরল রিজেক্স, যখন এটি যথেষ্ট ভাল।


ওহ, আমার ক্ষমা। আমি মনে করি গতকাল যখন পরীক্ষা করছিলাম তখন আমি / আমি মিস করেছি।
জন

3

পোস্টকোড বৈধ ফর্ম্যাটগুলির প্রথম অর্ধেক

  • [জেড] [জেড] [0-9] [জেড]
  • [জেড] [জেড] [0-9] [0-9]
  • [জেড] [0-9] [0-9]
  • [জেড] [জেড] [0-9]
  • [জেড] [জেড] [জেড]
  • [জেড] [0-9] [জেড]
  • [জেড] [0-9]

ব্যতিক্রম
অবস্থান ১ -
কিউভিএক্স ব্যবহৃত হয়নি পজিশন 2 - জিআইআর 0 এএ ব্যতীত আইজেজেড ব্যবহৃত হয় না
পজিশন 3 - এইএইচএমএনপিআরটিভিএসওয়াই কেবল ব্যবহৃত
পজিশন 4 - এবিএইচএমএনপিআরভিউএক্সওয়াই

পোস্টকোডের দ্বিতীয়ার্ধ

  • [0-9] [জেড] [জেড]

ব্যতিক্রমসমূহ
অবস্থান 2 + 3 - CIKMOV ব্যবহৃত হয়নি

মনে রাখবেন যে সমস্ত সম্ভাব্য কোড ব্যবহার করা হয়নি, সুতরাং এই তালিকাটি একটি কার্যকর কোডের জন্য প্রয়োজনীয় তবে পর্যাপ্ত শর্ত নয়। সব বৈধ কোডের তালিকার সাথে মিলিয়ে নেওয়া আরও সহজ হতে পারে?


3

রয়্যাল মেল এর প্রোগ্রামার গাইড অনুসারে একটি পোস্টকোড বৈধ বিন্যাসে রয়েছে :

          |----------------------------outward code------------------------------| |------inward code-----|
#special↓       α1        α2    AAN  AANA      AANN      AN    ANN    ANA (α3)        N         AA
^(GIR 0AA|[A-PR-UWYZ]([A-HK-Y]([0-9][A-Z]?|[1-9][0-9])|[1-9]([0-9]|[A-HJKPSTUW])?) [0-9][ABD-HJLNP-UW-Z]{2})$

Doogal.co.uk এর সমস্ত পোস্টকোড ম্যাচগুলি ছাড়া আর ব্যবহার নেই except

?স্থানটির পরে একটি যুক্ত করা এবং এই প্রশ্নের উত্তর দিতে কেস-সংবেদনশীল মিল ব্যবহার করা হচ্ছে :

'se50eg'.match(/^(GIR 0AA|[A-PR-UWYZ]([A-HK-Y]([0-9][A-Z]?|[1-9][0-9])|[1-9]([0-9]|[A-HJKPSTUW])?) ?[0-9][ABD-HJLNP-UW-Z]{2})$/ig);
Array [ "se50eg" ]

3

আপনি বৈধতা ব্যর্থ করতে না চান এবং তারপরে এটি আলাদা করে ছাঁটাতে চান না তবে ক্ষেত্রে এই উভয় পক্ষের খালি স্থান এবং ট্যাবকে অনুমতি দেয়।

^\s*(([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) {0,1}[0-9][A-Za-z]{2})\s*$)

এই একমাত্র প্যাটার্নটিই সি # (System.Text.RegularExpressions) ব্যবহার করে মূল প্রশ্নে বর্ণিত উদাহরণগুলি সহ আমার জন্য কাজ করেছিল
ম্যাটজেএস

এটি ইউকে সরকারের ভাঙা রেজিেক্স এবং এটি বৈধ ফর্ম্যাটগুলির কিছুতে বৈধতা দিতে ব্যর্থ।
ctwheels

@ctwheels হাই, ধন্যবাদ আপনি একটি ব্যর্থ পোস্টকোড প্রদান করতে পারেন, ধন্যবাদ
মাতাস ভাইটকেভিচিয়াস

উদাহরণস্বরূপ AAA 1AAবৈধ বিন্যাস নয়: ব্যাখ্যা এবং সমাধানের জন্য আমার উত্তর দেখুন see
ctwheels

2

এই তালিকায় যুক্ত করার জন্য আরও ব্যবহারিক রেজেেক্স যা আমি ব্যবহার করি তা ব্যবহারকারীকে প্রবেশের অনুমতি দেয় empty string:

^$|^(([gG][iI][rR] {0,}0[aA]{2})|((([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y]?[0-9][0-9]?)|(([a-pr-uwyzA-PR-UWYZ][0-9][a-hjkstuwA-HJKSTUW])|([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y][0-9][abehmnprv-yABEHMNPRV-Y]))) {0,1}[0-9][abd-hjlnp-uw-zABD-HJLNP-UW-Z]{2}))$

এই রেজেক্সের মধ্যে একটি alচ্ছিক স্থান সহ বড় হাতের এবং ছোট হাতের অক্ষরের অনুমতি দেওয়া হয়

একটি সফ্টওয়্যার বিকাশকারী দৃষ্টিকোণ থেকে এই রেজেক্সটি সফ্টওয়্যারটির জন্য দরকারী যেখানে কোনও ঠিকানা alচ্ছিক হতে পারে। উদাহরণস্বরূপ যদি কোনও ব্যবহারকারী তাদের ঠিকানা বিশদ সরবরাহ করতে না চান


1

এই পৃষ্ঠায় অজগর কোডটি একবার দেখুন:

http://www.brunningonline.net/simon/blog/archives/001292.html

আমি কিছু পোস্টকোড পার্সিং পেয়েছি। প্রয়োজনীয়তা খুব সহজ; আমাকে একটি পোস্টকোডকে আউটকোড এবং (alচ্ছিক) ইনকোডে পার্স করতে হবে। নতুনটি হ'ল আমাকে কোনও বৈধতা প্রদর্শন করতে হবে না - আমাকে কেবল একটি অস্পষ্ট বুদ্ধিমান পদ্ধতিতে কী সরবরাহ করা হয়েছে তা কাটাতে হবে। আমি ফর্ম্যাটিংয়ের ক্ষেত্রে আমার আমদানি সম্পর্কে খুব বেশি ধরে নিতে পারি না, যেমন কেস এবং এমবেডেড স্পেস। তবে এটি খারাপ সংবাদ নয়; খারাপ খবরটি হ'ল আমাকে আরপিজিতে এটি করতে হবে। :-(

তবুও, আমি আমার চিন্তাভাবনা স্পষ্ট করতে একসাথে কিছু পাইথন ফাংশন ছুড়েছি।

আমি এটি আমার জন্য পোস্টকোডগুলি প্রসেস করতে ব্যবহার করেছি।


1

আমাদের একটি ধারণা দেওয়া হয়েছিল:

ইউকে পোস্টকোডগুলি অবশ্যই নিম্নলিখিত ফর্মগুলির একটি হতে হবে (একটি ব্যতিক্রম সহ, নীচে দেখুন): 
    § এ 9 9 এএ 
    § এ 99 9 এএ
    § এএ 9 9 এএ
    § এএ 999 এএ
    § এ 9 এ 9 এএ
    § এএ 9 এ 9 এএ
যেখানে A একটি বর্ণানুক্রমিক চরিত্রকে উপস্থাপন করে এবং 9 একটি সংখ্যার অক্ষরকে উপস্থাপন করে।
অতিরিক্ত নিয়ম বর্ণানুক্রমিক অক্ষরগুলিতে নিম্নলিখিত হিসাবে প্রযোজ্য:
    1 পজিশনের অক্ষরটি Q, V বা X হতে পারে না
    Position পজিশনের চরিত্রটি আমি, জে বা জেড নাও হতে পারি
    Position 3 অবস্থানের অক্ষরটি আমি, এল, এম, এন, ও, পি, কিউ, আর, ভি, এক্স, ওয়াই বা জেড নাও হতে পারে
    4 অবস্থানের চরিত্রটি সি, ডি, এফ, জি, আই, জে, কে, এল, ও, কিউ, এস, টি, ইউ বা জেড নাও হতে পারে
    Most ডানদিকের দুটি পদের চরিত্রগুলি সি, আই, কে, এম, ও বা ভি হতে পারে না
একটি ব্যতিক্রম যা এই সাধারণ নিয়মগুলি অনুসরণ করে না তা হ'ল পোস্টকোড "জিআইআর 0 এএ", যা একটি বিশেষ বৈধ পোস্টকোড।

আমরা এটি নিয়ে এসেছি:

/^([A-PR-UWYZ][A-HK-Y0-9](?:[A-HJKS-UW0-9][ABEHMNPRV-Y0-9]?)?\s*[0-9][ABD-HJLNP-UW-Z]{2}|GIR\s*0AA)$/i

তবে দ্রষ্টব্য - এটি গোষ্ঠীগুলির মধ্যে যে কোনও সংখ্যক ফাঁকির অনুমতি দেয়।


2
paulslater19, দুর্ভাগ্যক্রমে আপনার সমাধান A99A 9AA পোস্টকোডের অনুমতি দেয়।

1

আমার কাছে ইউকে পোস্টকোড যাচাইয়ের জন্য রেজিেক্স রয়েছে।

এটি অভ্যন্তরীণ বা বাইরের যে কোনও ধরণের পোস্টকোডের জন্য কাজ করছে

^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))) || ^((GIR)[ ]?(0AA))$|^(([A-PR-UWYZ][0-9])[ ]?([0-9][ABD-HJLNPQ-UW-Z]{0,2}))$|^(([A-PR-UWYZ][0-9][0-9])[ ]?([0-9][ABD-HJLNPQ-UW-Z]{0,2}))$|^(([A-PR-UWYZ][A-HK-Y0-9][0-9])[ ]?([0-9][ABD-HJLNPQ-UW-Z]{0,2}))$|^(([A-PR-UWYZ][A-HK-Y0-9][0-9][0-9])[ ]?([0-9][ABD-HJLNPQ-UW-Z]{0,2}))$|^(([A-PR-UWYZ][0-9][A-HJKS-UW0-9])[ ]?([0-9][ABD-HJLNPQ-UW-Z]{0,2}))$|^(([A-PR-UWYZ][A-HK-Y0-9][0-9][ABEHMNPRVWXY0-9])[ ]?([0-9][ABD-HJLNPQ-UW-Z]{0,2}))$

এটি সকল ধরণের বিন্যাসের জন্য কাজ করছে।

উদাহরণ:

AB10 --------------------> কেবলমাত্র আউটপোস্টকোড

এ 1 1 এএ ------------------> পোষ্টকোডের সম্মিলন (বাইরে এবং অভ্যন্তরীণ)

WC2A --------------------> বাহ্য


1

গৃহীত উত্তরটি রয়্যাল মেল দ্বারা প্রদত্ত বিধিগুলি প্রতিবিম্বিত করে, যদিও রেজেক্সে টাইপো রয়েছে। এই টাইপগুলি gov.uk সাইটেও রয়েছে বলে মনে হয় (এটি এক্সএমএল সংরক্ষণাগার পৃষ্ঠায় রয়েছে)।

A9A 9AA বিন্যাসে নিয়মগুলি তৃতীয় অবস্থানে পি অক্ষরকে মঞ্জুরি দেয়, যখন রেজেক্স এটিকে অস্বীকার করে। সঠিক রেজেক্সটি হ'ল:

(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKPSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2}) 

নিম্নলিখিত ফলাফলগুলিতে এই ফলাফলটি সংক্ষিপ্ত করা (যা পার্ল / রুবি সিনট্যাক্স ব্যবহার করে):

(GIR 0AA)|([A-PR-UWYZ](([0-9]([0-9A-HJKPSTUW])?)|([A-HK-Y][0-9]([0-9ABEHMNPRVWXY])?))\s?[0-9][ABD-HJLNP-UW-Z]{2})

এটি প্রথম এবং দ্বিতীয় ব্লকের মধ্যে একটি .চ্ছিক স্থানও অন্তর্ভুক্ত করে।


1

আমি বাল্ক ট্রান্সফার পিডিএফ থেকে প্রায় সমস্ত প্রকারের বৈকল্পিকতা এবং রেজেক্সে যা খুঁজে পেয়েছি এবং উইকিপিডিয়া সাইটে যা আছে তা হ'ল, বিশেষত উইকিপিডিয়া রেজেক্সের জন্য, প্রথমটির পরে একটি ^ হওয়া দরকার (উল্লম্ব বার)। আমি এএ 9 এ 9 এএর পরীক্ষা করে এটি আবিষ্কার করেছি, কারণ অন্যথায় A9A 9AA এর ফর্ম্যাট চেক এটি বৈধতা দেবে। উদাহরণস্বরূপ ইসি 1 ডি 1 বিবি যাচাই করার জন্য যা অবৈধ হওয়া উচিত তা আবার বৈধ ফিরে আসে কারণ C1D 1BB একটি বৈধ ফর্ম্যাট।

আমি এখানে একটি ভাল রেজেক্সের জন্য নিয়ে এসেছি:

^([G][I][R] 0[A]{2})|^((([A-Z-[QVX]][0-9]{1,2})|([A-Z-[QVX]][A-HK-Y][0-9]{1,2})|([A-Z-[QVX]][0-9][ABCDEFGHJKPSTUW])|([A-Z-[QVX]][A-HK-Y][0-9][ABEHMNPRVWXY])) [0-9][A-Z-[CIKMOV]]{2})$

1

ইমিরিকাল টেস্টিং এবং পর্যবেক্ষণের পাশাপাশি https://en.wikedia.org/wiki/Postcodes_in_t__nited_Kingdom#Validation- এর সাথে নিশ্চিতকরণের মাধ্যমে , এখানে আমার একটি পাইথন রেজেক্সের সংস্করণ যা ইউকে পোস্টকোডকে সঠিকভাবে পার্স এবং বৈধ করে তুলেছে:

UK_POSTCODE_REGEX = r'(?P<postcode_area>[A-Z]{1,2})(?P<district>(?:[0-9]{1,2})|(?:[0-9][A-Z]))(?P<sector>[0-9])(?P<postcode>[A-Z]{2})'

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

আমি কোডে এটি কীভাবে ব্যবহার করব তা এখানে:

@dataclass
class UKPostcode:
    postcode_area: str
    district: str
    sector: int
    postcode: str

    # https://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom#Validation
    # Original author of this regex: @jontsai
    # NOTE TO FUTURE DEVELOPER:
    # Verified through empirical testing and observation, as well as confirming with the Wiki article
    # If this regex fails to capture all valid UK postcodes, then I apologize, for I am only human.
    UK_POSTCODE_REGEX = r'(?P<postcode_area>[A-Z]{1,2})(?P<district>(?:[0-9]{1,2})|(?:[0-9][A-Z]))(?P<sector>[0-9])(?P<postcode>[A-Z]{2})'

    @classmethod
    def from_postcode(cls, postcode):
        """Parses a string into a UKPostcode

        Returns a UKPostcode or None
        """
        m = re.match(cls.UK_POSTCODE_REGEX, postcode.replace(' ', ''))

        if m:
            uk_postcode = UKPostcode(
                postcode_area=m.group('postcode_area'),
                district=m.group('district'),
                sector=m.group('sector'),
                postcode=m.group('postcode')
            )
        else:
            uk_postcode = None

        return uk_postcode


def parse_uk_postcode(postcode):
    """Wrapper for UKPostcode.from_postcode
    """
    uk_postcode = UKPostcode.from_postcode(postcode)
    return uk_postcode

এখানে ইউনিট পরীক্ষা রয়েছে:

@pytest.mark.parametrize(
    'postcode, expected', [
        # https://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom#Validation
        (
            'EC1A1BB',
            UKPostcode(
                postcode_area='EC',
                district='1A',
                sector='1',
                postcode='BB'
            ),
        ),
        (
            'W1A0AX',
            UKPostcode(
                postcode_area='W',
                district='1A',
                sector='0',
                postcode='AX'
            ),
        ),
        (
            'M11AE',
            UKPostcode(
                postcode_area='M',
                district='1',
                sector='1',
                postcode='AE'
            ),
        ),
        (
            'B338TH',
            UKPostcode(
                postcode_area='B',
                district='33',
                sector='8',
                postcode='TH'
            )
        ),
        (
            'CR26XH',
            UKPostcode(
                postcode_area='CR',
                district='2',
                sector='6',
                postcode='XH'
            )
        ),
        (
            'DN551PT',
            UKPostcode(
                postcode_area='DN',
                district='55',
                sector='1',
                postcode='PT'
            )
        )
    ]
)
def test_parse_uk_postcode(postcode, expected):
    uk_postcode = parse_uk_postcode(postcode)
    assert(uk_postcode == expected)

0

আমার একটি সংস্করণ দরকার যা এসএএস-এ PRXMATCHএবং সম্পর্কিত ফাংশনগুলির সাথে কাজ করবে, তাই আমি এটি নিয়ে এসেছি:

^[A-PR-UWYZ](([A-HK-Y]?\d\d?)|(\d[A-HJKPSTUW])|([A-HK-Y]\d[ABEHMNPRV-Y]))\s?\d[ABD-HJLNP-UW-Z]{2}$

পরীক্ষার কেস এবং নোট:

/* 
Notes
The letters QVX are not used in the 1st position.
The letters IJZ are not used in the second position.
The only letters to appear in the third position are ABCDEFGHJKPSTUW when the structure starts with A9A.
The only letters to appear in the fourth position are ABEHMNPRVWXY when the structure starts with AA9A.
The final two letters do not use the letters CIKMOV, so as not to resemble digits or each other when hand-written.
*/

/*
    Bits and pieces
    1st position (any):         [A-PR-UWYZ]         
    2nd position (if letter):   [A-HK-Y]
    3rd position (A1A format):  [A-HJKPSTUW]
    4th position (AA1A format): [ABEHMNPRV-Y]
    Last 2 positions:           [ABD-HJLNP-UW-Z]    
*/


data example;
infile cards truncover;
input valid 1. postcode &$10. Notes &$100.;
flag = prxmatch('/^[A-PR-UWYZ](([A-HK-Y]?\d\d?)|(\d[A-HJKPSTUW])|([A-HK-Y]\d[ABEHMNPRV-Y]))\s?\d[ABD-HJLNP-UW-Z]{2}$/',strip(postcode));
cards;
1  EC1A 1BB  Special case 1
1  W1A 0AX   Special case 2
1  M1 1AE    Standard format
1  B33 8TH   Standard format
1  CR2 6XH   Standard format
1  DN55 1PT  Standard format
0  QN55 1PT  Bad letter in 1st position
0  DI55 1PT  Bad letter in 2nd position
0  W1Z 0AX   Bad letter in 3rd position
0  EC1Z 1BB  Bad letter in 4th position
0  DN55 1CT  Bad letter in 2nd group
0  A11A 1AA  Invalid digits in 1st group
0  AA11A 1AA  1st group too long
0  AA11 1AAA  2nd group too long
0  AA11 1AAA  2nd group too long
0  AAA 1AA   No digit in 1st group
0  AA 1AA    No digit in 1st group
0  A 1AA     No digit in 1st group
0  1A 1AA    Missing letter in 1st group
0  1 1AA     Missing letter in 1st group
0  11 1AA    Missing letter in 1st group
0  AA1 1A    Missing letter in 2nd group
0  AA1 1     Missing letter in 2nd group
;
run;

0

পদ্ধতির নীচে পোস্ট কোডটি চেক করবে এবং সম্পূর্ণ তথ্য সরবরাহ করবে

const valid_postcode = postcode => {
    try {
        postcode = postcode.replace(/\s/g, "");
        const fromat = postcode
            .toUpperCase()
            .match(/^([A-Z]{1,2}\d{1,2}[A-Z]?)\s*(\d[A-Z]{2})$/);
        const finalValue = `${fromat[1]} ${fromat[2]}`;
        const regex = /^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))[0-9][A-Za-z]{2})$/i;
        return {
            isValid: regex.test(postcode),
            formatedPostCode: finalValue,
            error: false,
            info: 'It is a valid postcode'
        };
    } catch (error) {
        return { error: true , info: 'Invalid post code has been entered!'};
    }
};
valid_postcode('GU348RR')
result => {isValid: true, formatedPostCode: "GU34 8RR", error: false, info: "It is a valid postcode"}
valid_postcode('sdasd4746asd')
result => {error: true, info: "Invalid post code has been entered!"}
valid_postcode('787898523')
result => {error: true, info: "Invalid post code has been entered!"}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.