জাভাস্ক্রিপ্টে সংক্ষিপ্ততম ইউআরএল রেজেজ ম্যাচ


16

সংক্ষিপ্ততম নিয়মিত এক্সপ্রেশন তৈরি করুন যা জাভাস্ক্রিপ্টে চালানোর সময় পাঠ্যের একটি URL এর সাথে মোটামুটি মিলবে

উদাহরণ:

"some text exampley.com".match(/your regular expression goes here/);

নিয়মিত প্রকাশের প্রয়োজন

  • সমস্ত বৈধ URL টি ক্যাপচার করুন যা HTTP এবং https এর জন্য for
  • ইউআরএল খুঁজছেন এমন স্ট্রিংগুলির সাথে মিল না নেওয়ার বিষয়ে চিন্তা করবেন না যা আসলে বৈধ ইউআরএলএসের মতো নয় super.awesome/cool
  • একটি জাভাস্ক্রিপ্ট রেজেক্স হিসাবে চালিত হলে বৈধ হতে হবে

পরীক্ষার মানদণ্ড:

ম্যাচ:

মিলে না:

  • উদাহরণ
  • সুপার / শীতল
  • সুপ্রভাত
  • আমি পারি
  • হ্যালো.

এখানে একটি পরীক্ষা যা কিছুটা স্পষ্ট করতে সাহায্য করতে পারে http://jsfiddle.net/MikeGrace/gsJyr/

আমি স্পষ্টতার অভাবের জন্য ক্ষমা চাইছি, ইউআরএলগুলি কতটা ভয়াবহ ছিল তা আমি বুঝতে পারি নি।


Ahgrrrr! আমি আমার সম্পাদনা সুযোগ মিস! আমি আপনি গেমটি একটি ভাষায় সীমাবদ্ধ করতে যাচ্ছেন সম্ভবত আপনার এটি সেই ভাষার সাথে ট্যাগ করা উচিত।
dmckee --- প্রাক্তন-মডারেটর বিড়ালছানা

একটি বৈধ URL অক্ষর গঠন কি? কারণ আমি কেবল \wসমস্ত কিছুর জন্য ব্যবহার করতে পারি আপনি কি বিভিন্ন ইউআরএল উপাদানগুলির জন্য ব্যাকগ্রিফিক্স আশা করেন?
মিং-টাং

1
আরএফসি 2396 অনুসারে "একটি ইউআরআই হ'ল একটি সীমিত সেট থেকে অক্ষরের ক্রম, যেমন বুনিয়াদি লাতিন বর্ণমালার অক্ষর, অঙ্কগুলি এবং কয়েকটি বিশেষ অক্ষর," আরএফসি 2396 অনুসারে ।
রানারিক

মাইক: আমার ধারণা, এখনও কিছু স্পষ্টতা আছে। এখন যেমন দাঁড়িয়ে আছে আমি কেবলমাত্র /:/নিয়মিত প্রকাশ হিসাবে বৈধ ইউআরআইয়ের সাথে মিল রাখতে পারি এবং all না মেলে «তালিকার সাথে আপনার সমস্ত উদাহরণের সাথে মেলে না। যতক্ষণ আপনি এই রুটে যাচ্ছেন ততক্ষণ এটি সহজভাবে প্রশ্ন: সংক্ষিপ্ততম নিয়মিত ভাবটি যা কোনও উদাহরণের সাথে মেলে না তবুও সমস্ত ইউআরআই ধরবে।
জোয়

1
আরও বিশদ সহ আরও দীর্ঘ চ্যালেঞ্জ লেখার চেষ্টা করুন।

উত্তর:


1
/.+\.\w\w.*/

3 টি স্ট্রিং এর সাথে মেলে না যা এটি হওয়া উচিত, অন্য যে কোনও কিছুর সাথে মেলে ;)
আপডেট: এটি এখনও সমস্ত 5 এর সাথে মেলে না


14

এই এক কাজ করে:

var re = /(^|\s)((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)/gi;

/*
(^|\s)                            : ensure that we are not matching an url 
                                    embeded in an other string
(https?:\/\/)?                    : the http or https schemes (optional)
[\w-]+(\.[\w-]+)+\.?              : domain name with at least two components;
                                    allows a trailing dot
(:\d+)?                           : the port (optional)
(\/\S*)?                          : the path (optional)
*/

Http://jsfiddle.net/9BYdp/1/ এ পরীক্ষাগুলি পাস করে

এছাড়াও মেলে:

  • example.com। (পিছনে বিন্দু)
  • উদাহরণ.কম: ৮০৮০ (বন্দর)

মাধুরী !!!!!!!
মাইক গ্রেস

2
আপনি কি কেবলমাত্র একটি উপাদান (যেমন লোকালহোস্ট) এর সাথে একটি হোস্টের সাথে মিল রাখতে চান না?
রানারিক

এটি স্পেসের অনুমতি দেয়
ব্রেঞ্জট

আমার জন্য কাজ কর. ty :)
স্টিল

দুর্দান্ত, তবে ব্যবহারকারীর / পাসওয়ার্ডের অংশগুলির সাথে ডোমেনগুলির জন্য নয়http://user:password@domain.com/path
Radon8472

5

এটি আপনার উদ্দেশ্য হিসাবে স্পষ্টতই তা করে না, তবে এটি আপনার মানদণ্ডগুলি পূরণ করে:

 /.*/
  • "সমস্ত বৈধ ইউআরএলগুলি মেলে যা HTTP এবং https এর জন্য।"

    হ্যাঁ, অবশ্যই মিলবে।

  • "ইউআরএল খুঁজছেন এমন স্ট্রিংগুলির সাথে মিল না নেওয়ার বিষয়ে চিন্তা করবেন না যা 'সুপার.উভায়স / কুল' এর মতো বৈধ ইউআরএল নয়" "

    হ্যাঁ, অবশ্যই, প্রচুর মিথ্যা ধনাত্মকতা থাকবে তবে আপনি বলেছিলেন যে তাতে কিছু যায় আসে না।

  • একটি জাভাস্ক্রিপ্ট রেজেক্স হিসাবে চালিত হলে বৈধ হতে হবে

    নিশ্চিত হিসাবে ডিম হিসাবে কাজ করে আপনার এটি করা উচিত।

যদি এই ফলাফলটি সঠিক উত্তর না হয় তবে আপনার মানদণ্ডের সাথে আপনাকে আরও নির্বাচনী হওয়া দরকার।

আপনার নিয়ম হিসাবে কাজ করে এমন একটি নিয়ম হওয়ার জন্য, আপনাকে আসলে একটি সম্পূর্ণ আরএফসি অনুবর্তী ম্যাচার বাস্তবায়ন করতে হবে এবং একটি সম্পূর্ণ আরএফসি অনুগত ম্যাচারের "মিল না হওয়ার বিষয়ে চিন্তা" হবে।

সুতরাং, "অনুমতির সাথে মিলে না যাওয়ার" শর্তাবলী, আপনাকে ঠিক উল্লেখ করতে হবে যে আরএফসি থেকে কোন বিচ্যুতি অনুমোদিত।

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

আপনার আপডেটে

আমি এখন পর্যন্ত আপনার যে সমস্ত পেস্ট করা উদাহরণগুলি মেলে (এবং ক্যাপচার করে) তার সাথে মেলে সবচেয়ে ন্যাজেজ রেগেক্স:

/(\S+\.[^/\s]+(\/\S+|\/|))/g;

এটি প্রকৃতিতে বেশ সহজ, এবং ধরে নেওয়া হয় যে কেবল 3 টি প্রাথমিক ফর্মই সম্ভব।

x.y
x.y/
x.y/z 

zহোয়াইটস্পেস নয় অ্যান্থিং হতে পারে। xসাদা জায়গা না কিছু হতে পারে। yহোয়াইট স্পেস বা '/' অক্ষর নয় এমন কিছু হতে পারে।

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

উদাহরণ:

hello.0/1  # valid 
1.2/1 # valid 
muffins://¥.µ/€  # probably valid

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

তবে আপনি এখানে এই নমুনাটিতে কাজ করতে উপরের যুক্তিগুলি দেখতে পারেন: http://jsfiddle.net/mHbXx/


তিনি প্রশ্নটি পরিবর্তন করেছেন, তবে আপনি /:/সম্পাদনার পরেও আরও ভাল করতে পারবেন :-)
জয়ে

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

এটি কি কেবল আমিই নাকি এই "www .google .com" এর সাথে মিলে যায়?
শিয়াভিণী

1
/https?\:\/\/\w+((\:\d+)?\/\S*)?/

চেষ্টা কর.

আমি নিয়মিত অভিব্যক্তিটি সীমিত করে রাখে এমন অগ্রণী এবং পেছনের স্ল্যাশগুলি অন্তর্ভুক্ত করছি, তাই আশা করি এটি আমার চরিত্রের গণনাটিকে ক্ষতিগ্রস্থ করবে না!

এই প্যাটার্নটি প্রোটোকলটিকে HTTP বা https উভয়ের মধ্যে সীমাবদ্ধ করে, একটি portচ্ছিক পোর্ট সংখ্যার জন্য অনুমতি দেয় এবং তারপরে হোয়াইটস্পেস ব্যতীত যে কোনও অক্ষরকে অনুমতি দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.