স্ট্রিংটি http: // বা https: // দিয়ে শুরু হয় কিনা তা পরীক্ষা করার জন্য রেজেক্স


200

আমি একটি রেজিএক্সপ সেট করার চেষ্টা করছি যা একটি স্ট্রিংয়ের সূচনা পরীক্ষা করবে এবং এতে যদি এটি থাকে http://বা https://এটি এটির সাথে মেলে।

আমি এটা কিভাবে করবো? আমি নিম্নলিখিতগুলি চেষ্টা করছি যা কার্যকর নয়:

^[(http)(https)]://

5
আপনি যদি কেবল স্ট্রিংয়ের শুরুটি পরীক্ষা করছেন, আপনি যে প্যাটার্নগুলি সন্ধান করছেন তার সাথে স্ট্রিংয়ের প্রথম কয়েকটি অক্ষরের একটি সরাসরি তুলনা করা সম্ভবত দ্রুততর।
টেম্পলেটটিফাইফ

2
আপনি একটি অক্ষর গ্রুপ তৈরি করছেন []। এটা তোলে মাপক হবে এক চরিত্র আছে যেটা হয় (, ), h, t, t, pবা s। অর্থাত এটি মেলে হবে s://কিন্তু ht://বা x://
ফেলিক্স ক্লিং

2
@templatetypedef: আমি মনে করি কিছু অকাল অপ্টিমাইজেশন বোধ করছি।
cdowie

4
অনেক আধুনিক রেগুলার এক্সপ্রেশন লাইব্রেরি হয় খুব দ্রুত । (প্রচুর) ব্যাক-ট্র্যাকিং না থাকলে নিয়মিত প্রকাশগুলি তুলনামূলকভাবে - বা আরও ভাল - "ইনডেক্স-অফ" শৈলীর পদ্ধতির সাথে তুলনা করতে পারে ( /^x/বনাম তুলনা করুন indexOf(x) == 0)। "শুরু হয়" শৈলীর পদ্ধতির কাছে কম ওভারহেড থাকতে পারে তবে আমার সন্দেহ হয় যে এটি খুব কমই গুরুত্বপূর্ণ - কোনটি সবচেয়ে পরিষ্কার হতে পারে তা বেছে নিন: x.StartWith("http://") || x.StartsWith("https://")তবে কোডের স্পষ্টতার বাইরে এমনটি করুন, যদি না ন্যায়সঙ্গত না হয়ে পারফরম্যান্সের উন্নতি করার চেষ্টা না করেন বিশ্লেষণ এবং প্রয়োজনীয়তা :-)

উত্তর:


353

আপনার ব্যবহারটি []ভুল - নোট করুন যে []একটি অক্ষর শ্রেণি নির্দেশ করে এবং তাই কেবলমাত্র একটি অক্ষরের সাথে মেলে। অভিব্যক্তিটি [(http)(https)]অনুবাদ করে "ম্যাচ এ (, এ h, এ t, ক t, এ p, ক ), এ, বা এ s"। (সদৃশ অক্ষরগুলি এড়ানো হবে।)

এটা চেষ্টা কর:

^https?://

আপনি যদি সত্যিই বিকল্প ব্যবহার করতে চান তবে পরিবর্তে এই বাক্য গঠনটি ব্যবহার করুন:

^(http|https)://

পিএইচপি ইনপুট স্ট্রিং হিসাবে: $ regex = '/ ^ (https?: \ / \ /)';
স্টিভ টাবার

9
স্টিভ, আমি মনে করি আপনি শেষের দিকে একটি / মিস করেছেন: $ regex = '/ ^ (https?: \ / \ /) /';
অক্সি

10
যদি কিছু বাদাম দুর্ঘটনাক্রমে http, ge regex = '/ ^ (https?: \ / \ /) / I' বড় হাতের অক্ষরে অক্ষরে অক্ষরে অক্ষরে অক্ষরে অক্ষরে অক্ষরে অক্ষরে অক্ষরে অক্ষরে অক্ষরে অক্ষরে অক্ষরিত হয়;
জেফকি

3
আপনি পালাতে / ব্যবহার করতে ভুলে গেছেন \। তাই হবে ^https?:\/\/। আমি কি সঠিক?
শাফিজাদেহ

4
@ শাফিজাদেহ /নিয়মিত প্রকাশের ক্ষেত্রে বিশেষ চরিত্র নয়, কেবল সেই ভাষাগুলিতে যেখানে /আক্ষরিক নিয়মিত অভিব্যক্তি চিহ্নিত করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, /সি # ব্যবহার করার সময় নিয়মিত এক্সপ্রেশনগুলিতে পালানো দরকার হয় না , কারণ সি # নিয়মিত এক্সপ্রেশনটি স্ট্রিং আক্ষরিক হিসাবে প্রকাশ করা হয় (অংশে)। পার্ল (যেমন হিসাবে বিকল্প ডিলিমিটার ব্যবহার করার সময়) ব্যবহার করার দরকার নেই সেগুলিও তাদের দরকার নেই m#^https?://#। সুতরাং আপনার মন্তব্য সরাসরি সম্বোধন করতে: (ক) না, আমি কিছু পালাতে ভুলবেন না। (খ) আপনার পছন্দের ভাষায় যে কোনও চরিত্রকে বিশেষভাবে বিবেচনা করা হবে আপনার পালাতে হবে।
cdowie


25
^https?://

প্রসঙ্গের উপর নির্ভর করে আপনাকে ফরোয়ার্ড স্ল্যাশগুলি এড়িয়ে যেতে পারে।





0

এই কেসটিকে সংবেদনশীল করা এএসপিএন তে কাজ করছে না তাই আমি কেবল প্রতিটি অক্ষর নির্দিষ্ট করে দিয়েছি।

এটি একটি এএসপিএন রেগুলারএক্সপ্রেসভিডিয়েটারে কাজ করার জন্য আমাকে যা করতে হয়েছিল তা এখানে :

[Hh][Tt][Tt][Pp][Ss]?://(.*)

মন্তব্য:

  • (?i)এবং ব্যবহার /whatever/iসম্ভবত কার্যকর হয়নি কারণ জাভাস্ক্রিপ্ট সমস্ত ক্ষেত্রে সংবেদনশীল কার্যকারিতা নিয়ে আসে নি
  • মূলত ^শুরুতে ছিল তবে এটি কিছু যায় আসে না তবে (.*)করণীয় (এক্সপ্রেশনটি ছাড়া কাজ করে না (.*)তবে কাজ করে না^ )
  • //যদিও পালটে যাওয়ার দরকার নেই তবে এটি একটি ভাল ধারণা।

আপনার যদি প্রয়োজন হয় তবে এটি সম্পূর্ণ নিয়মিত এক্সপ্রেশনভালিডেটর:

<asp:RegularExpressionValidator ID="revURLHeaderEdit" runat="server" 
    ControlToValidate="txtURLHeaderEdit" 
    ValidationExpression="[Hh][Tt][Tt][Pp][Ss]?://(.*)"
    ErrorMessage="URL should begin with http:// or https://" >
</asp:RegularExpressionValidator>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.