ریجِکس (RegEx) در جاوا اسکریپت بهمراه مثال
ریجکس مخفف عبارت Regular Expression که ترجمه فارسی آن عبارات با قاعده می باشد. ترجمه فارسی ریجکس زیاد کمک خاصی به شما نمی کنه در نتیجه بهتره سراغ مثال های عملی بریم.
یک لحظه تصور کنید که دارید برنامه ای مینویسید که کاربر میخواهد نام کاربری خود را انتخاب کند که داری حروف، کاراکتر و اعداد باشد. همچنین تعداد کاراکترهای کاربر محدود باشد. برای اعتبار سنجی این نام کاربری باید از ریجکس استفاده کرد.
برای اعتبار سنجی فرم ها در فرانت بهترین روشی که میتوان استفاده کرد ریجکس می باشد، با چند مثال عملی ریجکس را بصورت مقدماتی براتون توضیح میدم.
در ریجکس لازمه یک الگو (pattern) تعریف شود که جستجو شود. در این الگو برخی حرفها (متا کاراکترها) معنای خاصی دارند.
سینتکس ریجکس بصورت // بین دو اسلش می باشد و برای نوشتن pattern ی که باهاش میشه اعتبار سنجی رو انجام داد باید داخل // نوشته بشه، با چن مثال بصورت عملی بهتون نشون میدم که باید چیکار کنید.
let str = " enigma love"
let pattern = /^ enigma/
pattern.test(str)
تو این مثال علامت ^ داخل // نشون میده که اگه کلمه enigma در اول اون اینپوتی که داریم اعتبار سنجی میکنیم بیاد به ما true برمیگردونه و ما با همین میتونیم احراز هویت انجام بدیم. (برای اعتبار سنجی pattern از متد test استفاده کردیم)
✔پاسخ تست مثال ها true است
let str = "love enigma"
let pattern = /enigma$/
pattern.test(str)
تو این مثال علامت $ داخل // نشون میده که اگه کلمه enigma در آخر اون اینپوتی که داریم اعتبار سنجی میکنیم بیاد به ما true برمیگردونه
let str = " enigma 2035"
let pattern = /^enigma+\s+\d/
pattern.test(str)
تو این مثال بعد از کلمه enigma حتما باید یه sapce بیاد و بعدش حتما عدد بیاد، s\ متاکاراکتر space می باشد و d\ متا کاراکتر عدد می باشد و بوسیله + بهم دیگه وصل میشن
let str = " enigma22323"
let pattern = /^enigma+\S+\D/
pattern.test(str)
بعد از اینکه کلمه enigma اومد بعدش نباید space و عدد بیاد، متاکاراکتر S\ نماد نیومدن space و D\ نماد نیومدن عدد هستش، تو این مثال به ما false برگردونده میشه چون بعد از enigma عدد اومده
let str = "enigma1"
let pattern = /^enigma+\w/
pattern.test(str)
بعد از اینکه کلمه enigma اومد بعدش حتما باید یه کاراکتر حرف یا عدد یا سیمبول بیاد و اجباریه
let str = "hi enigma"
let pattern = /\benigma/
pattern.test(str)
شروع enigma در هر جایی باشه true برمیگردونه
let str = "enigma@@"
let pattern = /^enigma\@/
pattern.test(str)
بعد از enigma حتما باید @ بیاد(همچنین میشه از ! # $ % ^ & * علائم هم استفاده کرد)
let str = "enigmah"
let pattern = /^enigma+h/
pattern.test(str)
بعد از کلمه enigma حداقل باید یک بار کاراکتر h بیاد
let str = "enigmapp"
let pattern = /^enigma+p{2}/
pattern.test(str)
بعد از کلمه enigma حداقل باید دوبار کاراکتر p بیاد
let str = "enigma1"
let pattern = /[bC1]/
pattern.test(str)
در داخل [ ] میتوان انواع از a تا z و 0 تا 9 و A تا Z رو قرار داد، در مثال بالا اگر حتی یکی از کاراکترهای b یا C یا 1 بیاد true برگردونده میشه
let str = "enigma1"
let pattern = /[a-z0-9]/
pattern.test(str)
از کاراکتر a تا z و یا 0 تا 9 یکیشون هم بیاد true برمیگردونه
let str = "enigma1"
let pattern = /[a-z]+[0-9]/
pattern.test(str)
طبق این pattern هم کاراکتر از a تا z اجباری هستش هم از عدد 0 تا 9 در غیر این صورت false برمیگردونه
let email = 'enigmateam.co@gmail.com'
let pattern = /[a-z0-9]+@+[a-z]+\.+[a-z]/
pattern.test(email)
تو این مثال اخر یه ایمیل ساده رو validate کردم، اولش گفته شده از کاراکتر a تا z یا 0 تا 9 رو میتونید وارد کنید بعد از اون حتما باید @ رو وارد کنید، بعدش از کاراکتر a تا z سپس دات . و بعد از اون از کاراکتر a تا z رو کاربر باید وارد کنه
حالا وقتشه دو مورد از بهترین ولیدیشن هایی که میشه با ریجکس انجام داد و میتونید توی فرم هاتون استفاده کنید رو براتون مینویسم:
Email Validation:
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
Iran Mobile Number Validation:
/(0|\+98)?([ ]|,|-|[()]){0,2}9[1|2|3|4]([ ]|,|-|[()]){0,2}(?:[0-9]([ ]|,|-|[()]){0,2}){8}/
اینم یه سایت عالی برای Generate کردن ریجکس :
https://regexr.com
امیدوارم با نوشتن این مقاله تونسته باشم تا حدودی با ریجکس در جاوا اسکریپت آشناتون کنم.
مطلبی دیگر از این انتشارات
?سی و یکمین دورهمی گنو ? 3️⃣1️⃣
مطلبی دیگر از این انتشارات
Just For Fun یا چی؟؟
مطلبی دیگر از این انتشارات
داکر در عمل :: نصب داکر روی دبیان/ابونتو/مینت