عبارت با قاعده (regex یا regexp) که گاهی از آن به عبارات گویا یاد میشود، عبارتی است که:
تمامی موارد فوق میتوانند به کمک عبارات منظم پیاده شوند.
به دوشیوه میتوان یک عبارت با قاعده ایجاد نمود:
۱) با خود عبارت با قاعده بصورت جزء به جزء حروف: در این حالت، الگوی تطابق بین دو اسلش محصور میشود. همانند زیر:
var reg = /ab*/;
این یعنی تطابق با a ، ab ، abb ، abbb ، abbbb ، abbbbb و غیره
ولی نامطابق با b ، bc ، abc ، aba و غیره
۲) با فراخوانی متد سازنده: در این حالت، الگوی تطابق، به همراه تابع سازنده RegExp بیان میشود. همانند زیر:
var reg = new RegExp('ab*');
این الگو دقیقا مانند حالت قبلی عمل می کند.
۱) میخواهیم متن مشخصی را پیدا کنیم. در این مثال یک فایل متنی داریم که به عنوان داده مرجع (dataset) از آن استفاده می کنیم. آن را به روش همزمان خوانده و محتوا را در متغیر str ذخیره میکنیم. سپس، الگویی فراهم میکنیم که در فایل متنی مذکوربه دنبالش بگردیم. در این حالت، عبارت الگو برابر با "man" بوده که درادامهی آن تعدیل کنندههای regex را به صورت زیر برای الگو به کار میبریم:
برای یافتن تطابقها، تابع توکار match را به کار میگیریم. و درنهایت، تعداد وقوع الگو را در رشتهی str چاپ میکنیم.
قطعه کد زیر مربوط به همین مثال است:
var fs = require('fs'); var filename = 'data.txt'; var str = fs.readFileSync(filename).toString(); var pattern = /man/gim; var myarray = str.match( pattern ); var len = myarray.length; console.log("Occurrences of pattern in the string is : " + len);
۲) یافتن تعداد برچسبها در یک فابل: فایل دیتاست در این مثال data.html است. این مثال تا حدودی شبیه به قبلی است بجز اینکه:
قطعه کد زیر را ببینید:
var fs = require('fs'); var filename = 'data.html'; var str = fs.readFileSync(filename).toString(); var pattern = /<(\"[^\"]*\"|'[^']*'|[^'\">])*>/gim; var myarray = str.match( pattern ); var len = myarray.length; console.log("Occurrences of pattern in the string is : " + len);
۳) اعتبارسنجی ایمیلها: در اینجا نشانی یک ایمیل را بعنوان ورودی میدهیم تا ببینیم آیا تمام شرایط یک ایمیل معتبر را داراست یا خیر. الگوی ما، باید برخی الزامات همچون وقوع یک علامت @، وجود دامنه یا زیردامنه و غیره را برآورده سازد. بعد از تطابق، جنانچه ایمیل، معتبر باشد، پیام "Valid" و درغیر اینصورت پیام "Please enter a valid email" را درخروجی کنسول نمایش خواهد داد.
قطعه کد آن نیز به شرح زیراست:
var str = 'fakedemo@roxo.ir' var pattern = /^[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])?)*$/; var res = str.match( pattern ); if(res) { console.log("Valid email address"); } else { console.log("Please enter a valid email address"); }
نکته: این قطعه برنامه، نشانی ایمیل، وجود یا عدم وجود دامنه و زیردامنه را بررسی نمیکند، بلکه فقط بررسی میکند که آیا ایمیل داده شده تمام شرایط یک ایمیل واقعی را دارد یا خیر.
۴) اعتبارسنجی یک عدد هگزادسیمال: این نیز یک مثال بسیار متعارف است. در اینجا رشتهای را اعتبارسنجی و بررسی میکنیم که آیا میتواند یک عدد هگزادسیمال باشد یا خیر. به یاد دارید که ارقام یک عدد هگزادسیمال محدود به موارد زیر است:
پس تنها اگر تک تک کاراکترهای رشتهی داده شده، در محدوده مقادیر فوق باشند، یک عدد هگزادسیمال است.
قطعه کد زیر این بررسی را انجام میدهد:
var str = 'FFFFFF' var pattern = /^[a-fA-F0-9]+$/g; var res = str.match( pattern ); if(res) { console.log("Valid Hexadecimal number"); } else { console.log("Not a valid Hexadecimal number"); }
۵) اعتبار سنجی رمز عبور: به کمک عبارات منظم این امر انجام پذیر است. رمزهای عبور باید قوی باشند، به همین خاطر یاید معیارهایی همچون زیر فراهم کنیم:
بنابراین باید عبارت با قاعده ای را تولید کنیم که به کمک آن بتوانیم بررسی کنیم آیا رمز عبور تمام شرایط را برآورد میکند یا خیر. در قطعه کدی که در زیر آمده، اگر رمز عبور ساخته شده، شرایط را برآورد کند، پیام "Valid password" چاپ می شود و در غیر اینصورت حتی اگر تنها یکی از شرایط فوق هم برقرار نباشد، پیام "invalid password" در خروجی کنسول نمایش داده میشود. قطعه کد را ببینید:
var str = 'Aa#1aaabcde' var pattern = /^(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{6,16}$/;; var res = str.match( pattern ); if(res) { console.log("Valid password"); } else { console.log("Not a valid password"); }
در این قسمت از سری آموزشهای نود جی اس موارد زیر را فراگرفتیم:
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.