فهرست
- مقدمه
-
بازی
- متد length: پیدا کردن طول استرینگ
- متد wordCount: شمارش تعداد کلمات استرینگ
- متد password: ایجاد یک کلمهی عبور تصادفی به طول دلخواه
- متد random: تولید یک string تصادفی به طول دلخواه
- متد wrap: محاط کردن استرینگ بین استرینگهای دیگر
- متد reverse: معکوس کردن استرینگ
- متد repeat: تکرار استرینگ به دفعات دلخواه
- متد substrCount: پیدا کردن تعداد رخداد یک زیر رشته در استرینگ اصلی
- متد remove: حذف یک رشته از استرینگ اصلی
- متد mask: مخفی کردن کاراکترهای استرینگ با یک کاراکتر دلخواه
- متد toBase64: تبدیل استرینگ به Base64
- نگارش ترکیبی کلمات
- تغییر case استرینگ
- شروع و پایان
- پر کردن فضای خالی
- تستها یا متدهایی که true یا false برمیگردانند.
- کوتاه کردن استرینگ داده شده
- گرفتن substring از استرینگ اصلی
- تغییر شکل دادن استرینگ
- متدهای بر مبنای پوزیشن
- signular/ plural
- کار با white space ها
- Markdown
- جایگزینیها
- ایجاد Uuid
- ایجاد ulid
- پایان مطلب و نتیجهگیری
مقدمه
در این مطلب کلاس Illuminate\Support\Str
و متدهای آن در لاراول را بررسی میکنیم. تمام تلاش خود را کردهام تا با طبقهبندی متدها و ارائهی توضیحات شفاف و مثالهای متنوع منبع قابل اتکایی برای مطالعه و مراجعههای مکرر علاقمندان فراهم کنم.
بیائید کار را با بازی با چند متد شروع کنیم.
بازی
متد length: پیدا کردن طول استرینگ
متد Str::length()
طول استرینگ داده شده را بر میگرداند.
use Illuminate\Support\Str; echo Str::length('123456789');// 9
متد wordCount: شمارش تعداد کلمات استرینگ
با متد Str::wordCount()
میتوان تعداد کلمات یک استرینگ را به دست آورد.
use Illuminate\Support\Str; echo Str::wordCount('I am Mohsen Safari.');// 4
متد password: ایجاد یک کلمهی عبور تصادفی به طول دلخواه
متد Str::password()
یک کلمهی عبور شامل حروف، اعداد، symbol ها ایجاد میکند. اگر آرگومانی به آن ندهیم طول کلمهی عبور ایجاد شده ۳۲ کاراکتر خواهد بود. با دادن یک عدد به عنوان آرگومان میتوان طول کلمهی عبور را تعیین کرد.
use Illuminate\Support\Str; $password = Str::password();// ZC?Mx8[D??eBY;W%nE>!)1N)yCMHwgSU // find generated password's lengthecho Str::length($password);// 32 echo Str::password(5); // .5$gR
متد random: تولید یک string تصادفی به طول دلخواه
با متد Str::random()
میتوان یک استرینگ تصادفی به طول داده شده تولید کرد.
use Illuminate\Support\Str; echo Str::random(32)// 5p30EhUg0C1euLnMY41wb7P6AVrj1BoH
متد createRandomStringsUsing: ایجاد string تصادفی توسط یک closure
با رجیستر کردن یک closure توسط متد Str::createRandomStringsUsing()
میتوان منطق تولید کلمهی random را در دست گرفت. با این امکان میتوان کلمات رندوم فیک تولید کرد و یا اینکه همیشه یک کلمه را برگرداند.
use Illuminate\Support\Str; Str::createRandomStringsUsing(function () { return 'Alireza Amini';}); echo Str::random();// Alireza Aminiecho Str::random(2);// Alireza Amini
مشاهده میکنید که در این حالت درخواست ایجاد کلمهی تصادفی به طول ۲ کاراکتر هیچ تاثیری ندارد و عینا مقدار برگشتی از تابع رجیستر شده به عنوان خروجی متد منظور میشود.
متد createRandomStringsNormally: برگرداندن منطق تولید استرینگ تصادفی به حالت اولیه
بعد از اینکه کارمان در مرحله قبل تمام شد لازم است به لاراول بفهمانیم که از این به بعد استرینگ تصادفی را به شیوهی اولیه خودش تولید کند و نه با استفاده از تابع رجیستر شده. این کار توسط متد Str::createRandomStringsNormally
انجام میشود.
use Illuminate\Support\Str; Str::createRandomStringsUsing(function () { return 'Alireza Amini';}); echo Str::random();// Alireza Amini Str::createRandomStringsNormally(); echo Str::random();// Y8bfGOcjhR06Uub3
متد wrap: محاط کردن استرینگ بین استرینگهای دیگر
با متد Str::wrap()
میتوان استرینگ را بین دو استرینگ دیگر محاط کرد.
use Illuminate\Support\Str; echo Str::wrap('Mohsen', '<', '>');// <Mohsen> echo Str::wrap("Mohsen", '"');// echo Str::wrap("Mohsen", '"');
متد unwrap: معکوس کردن wrap
با متد Str::unwrap()
میتوان استرینگهای محاط کننده را از ابتدا و انتهای استرینگ اصلی حذف کرد.
use Illuminate\Support\Str; echo Str::unwrap('<Mohsen>', '<', '>');// Mohsen echo Str::unwrap('"Dar jahan che khabar ast?!"', '"');// Dar jahan che khabar ast?!
متد reverse: معکوس کردن استرینگ
با متد Str::reverse()
میتوان استرینگ داده شده را معکوس کرد.
use Illuminate\Support\Str; echo Str::reverse('Dokaj.com');// moc.jakoD
متد repeat: تکرار استرینگ به دفعات دلخواه
با متد Str::repeat()
میتوان استرینگ داده شده را به تعداد دلخواه پشت سر هم تکرار کرد.
use Illuminate\Support\Str; $str = Str::repeat('Salam ', 3);echo $str;// Salam Salam Salam echo Str::wrap($str, '<', '>');// <Salam Salam Salam >
متد substrCount: پیدا کردن تعداد رخداد یک زیر رشته در استرینگ اصلی
با متد Str::substrCount()
میتوان تعداد وقوع یک زیر رشته در استرینگ اصلی را پیدا کرد.
use Illuminate\Support\Str; echo Str::substrCount('This is my laptop', 'is');// 2
همان طور که مشاهده میکنید رشتهی is دو بار در استرینگ اصلی تکرار شده است.
متد remove: حذف یک رشته از استرینگ اصلی
با متد Str::remove()
میتوان یک زیر رشته یا آرایهای از زیر رشتهها را از استرینگ اصلی حذف کرد.
use Illuminate\Support\Str; echo Str::remove('reza', 'I am Alireza Amini');// I am Ali Amini echo Str::remove(['Ali', 'Javad'], 'Hossein, Ali, Javad and Reza');// Hossein, , and Reza
عملیات یافتن زیر رشته به صورت case-sensitive انجام میشود. برای غیر فعال کردن این ویژگی میتوان false
را به عنوان آرگومان سوم به متد فوق ارسال کرد.
متد mask: مخفی کردن کاراکترهای استرینگ با یک کاراکتر دلخواه
گاهی اوقات به عنوان مثال لازم است تعدادی از ارقام شمارهی موبایل را با کاراکتر *
پوشاند و نتیجه را در صفحه نمایش داد. این کار توسط متد Str::mask()
انجام میشود.
در مثال زیر از اندیس چهارم به طول چهار کاراکتر با *
پوشانده میشوند.
use Illuminate\Support\Str; echo Str::mask('09124650325', '*', 4, 4);// 0912****325
اگر آرگومان سوم منفی باشد نقطهی شروع پوشاندن را از انتهای رشته حساب میکند. به مثال زیر توجه کنید.
use Illuminate\Support\Str; echo Str::mask('09124650325', '*', -7, 4);// 0912****325
اگر آرگومان چهارم منفی باشد دیگر معنای length نمیدهد بلکه به نقطهی پایان پوشاندن از انتهای رشتهی اصلی اشاره میکند.
use Illuminate\Support\Str; echo Str::mask('09124650325', '*', 4, -3);// 0912****325
متد toBase64: تبدیل استرینگ به Base64
متد Str::toBase64()
استرینگ داده شده را با Base64 کد میکند.
use Illuminate\Support\Str; echo Str::toBase64('Mohsen');// TW9oc2Vu
نگارش ترکیبی کلمات
متد camel
متد Str::camel()
استرینگ ورودی را به شکل camelCase برمیگرداند. به فرمتهای مختلف استرینگ ورودی توجه کنید.
use Illuminate\Support\Str; echo Str::camel("ali-reza-amini");// aliRezaAmini echo Str::camel("ali_reza_amini");//aliRezaAmini echo Str::camel("AliRezaAmini");// aliRezaAmini echo Str::camel("Ali Reza Amini");// aliRezaAmini
متد kebab
متد Str::kebab()
استرینگ ورودی را به شکل kebab-case تبدیل میکند.
use Illuminate\Support\Str; echo Str::kebab('AliRezaAmini');// ali-reza-amini echo Str::kebab('aliRezaAmini');// ali-reza-amini echo Str::kebab('ali reza amini');// ali-reza-amini
متد snake
متد Str::snake()
استرینگ ورودی را به فرم snake_case برمیگرداند. به استرینگ ورودی و خروجی متد توجه کنید.
use Illuminate\Support\Str; echo Str::snake('AliReZaAmini');// ali_re_za_amini echo Str::snake("ali reza amiNi");// ali_reza_ami_ni echo Str::snake("Ali-Reza-Amini");// ali-_reza-_amini echo Str::snake("aliRezaAmini");// ali_reza_amini
متد studly
متد Str::studly()
استرینگ ورودی را به فرم StudlyCase یا PascalCase تبدیل میکند. به استرینگ ورودی و خروجی متد توجه کنید.
use Illuminate\Support\Str; echo Str::studly('aliRezaAmini');// AliRezaAmini echo Str::studly('ali_reZa_amini');// AliReZaAmini echo Str::studly('ali-reza-amiNi');// AliRezaAmiNi echo Str::studly("ali reza AmiNi");// AliRezaAmiNi
متد headline
متد Str::headline()
استرینگ ورودی که کلماتش بر مبنای تغییر case یا بر مبنای -
و یا بر مبنای _
از هم جدا شدهاند را با space
از هم جدا میکند و اولین حرف هر کلمه را به حرف بزرگ تبدیل میکند. در واقع به نوعی بر عکس کنندهی چهار متد بالا است.
use Illuminate\Support\Str; echo Str::headline('aliRezaAmini');// Ali Reza Amini echo Str::headline('ali-reza-amini');// Ali Reza Amini echo Str::headline('AliRezaAmini');// Ali Reza Amini
تغییر case استرینگ
متد upper: با حروف بزرگ نوشتن استرینگ ورودی
متد Str::upper()
استرینگ ورودی را به طور کامل با حروف بزرگ برمیگرداند.
use Illuminate\Support\Str; echo Str::upper('My naMe is MohSen SaFari');// MY NAME IS MOHSEN SAFARI
متد lower: با حروف کوچک نوشتن استرینگ ورودی
متد Str::lower()
استرینگ ورودی را تماما با حروف کوچک برمیگرداند.
use Illuminate\Support\Str; echo Str::lower('My naME iS MohsEn safarI');// my name is mohsen safari
متد ucfirst: با حرف بزرگ نوشتن اولین کاراکتر استرینگ ورودی
متد Str::ucfirst()
اولین کاراکتر استرینگ ورودی را به upper case تبدیل میکند.
use Illuminate\Support\Str; echo Str::ucfirst('my name is mohsen');// My name is mohsen
متد lcfirst: با حرف کوچک نوشتن اولین کاراکتر استرینگ ورودی
متد Str::lcfirst()
اولین کاراکتر استرینگ ورودی را به lower case تبدیل میکند.
use Illuminate\Support\Str; echo Str::lcfirst('MY NAME IS MOHSEN');// mY NAME IS MOHSEN
متد title
متد Str::title()
هر کلمهای را که تشخیص بدهد حرف اولش را به بزرگ و مابقی حروف را به کوچک تبدیل میکند، به عبارت دیگر آن را title case میکند. کلماتی که بعد از space
و یا _
و یا -
بیایند به عنوان کلمهی جدید محسوب میشوند.
use Illuminate\Support\Str; echo Str::title("I LOVE YOU");// I Love You echo Str::title("Che-dar-chante-dari");// Che-Dar-Chante-Dari echo Str::title("Man_tO_RA_neMishenasam");// Man_To_Ra_Nemishenasam
شروع و پایان
متد start: اطمینان از شروع شدن استرینگ با کاراکترهای دلخواه
متد Str::start()
بررسی میکند که آیا استرینگ ورودی با کاراکترهایی که کاربر به عنوان آرگومان دوم وارد کرده است شروع میشود یا نه. اگر شروع میشود که هیچ! همان استرینگ ورودی را برمیگرداند. در غیر این صورت کاراکترهای داده شده را به اول استرینگ prepend میکند و نتیجه را برمیگرداند.
use Illuminate\Support\Str; echo Str::start(">>> This string starts with >>> originally", ">>>");// >>> This string starts with >>> originally echo Str::start("this string is prepended with > via Str::start() second argument", "> ");// > this string is prepended with > via Str::start() second argument
متد finsih: اطمینان از پایان یافتن استرینگ ورودی با کاراکترهای دلخواه
متد Str::finsih()
بررسی میکند که آیا استرینگ ورودی با کاراکترهای فراهم شده توسط آرگومان دوم تمام شده است یا نه. اگر تمام شده بود که هیچ! همان استرینگ ورودی را برمیگرداند. در غیر این صورت کاراکترهای آرگومان دوم را به انتهای استرینگ اضافه میکند و نتیجه را برمیگرداند.
use Illuminate\Support\Str; echo Str::finish('Chizi baraye goftan nist', ' ...');// Chizi baraye goftan nist ... echo Str::finish("My name is Mohsen.", '.');// My name is Mohsen.
پر کردن فضای خالی
متد padRight: پر کردن فضای خالی سمت راست با کاراکترهای دلخواه
متد Str::padRight()
استرینگ ورودی را در سمت چپ فضای داده شده به طول آرگومان دوم قرار میدهد، سپس فضای خالی در سمت راست استرینگ را _ تا زمانی که طول استرینگ حاصله به طول دلخواه (آرگومان دوم) برسد _ با تکرار کاراکترهایی که توسط آرگومان سوم فراهم شده است پر میکند.
use Illuminate\Support\Str; echo Str::padRight("My name is Mohsen.", 80, '<');// My name is Mohsen.<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
متد padLeft: پر کردن فضای خالی سمت چپ با کاراکترهای دلخواه
متد Str::padLeft()
استرینگ ورودی را در سمت راست فضای داده شده به طول آرگومان دوم قرار میدهد، سپس فضای خالی در سمت چپ استرینگ را _ تا زمانی که طول استرینگ حاصله به طول دلخواه (آرگومان دوم) برسد _ با تکرار کاراکترهایی که توسط آرگومان سوم فراهم شده است پر میکند.
use Illuminate\Support\Str; echo Str::padLeft("My name is Mohsen.", 80, '>');// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>My name is Mohsen.
متد padBoth: پر کردن فضای خالی طرفین استرینگ ورودی با کاراکترهای دلخواه
متد Str::padBoth()
استرینگ ورودی را در وسط فضای مشخص شده به طول آرگومان دوم قرار میدهد، سپس فضاهای خالی در طرفین استرینگ را _ تا زمانی که طول استرینگ حاصله به طول دلخواه (آرگومان دوم) برسد _ با تکرار کاراکترهایی که توسط آرگومان سوم فراهم شده است پر میکند.
use Illuminate\Support\Str; echo Str::padBoth('In the name of God', 30, '.:.');// .:..:.In the name of God.:..:.
تستها یا متدهایی که true یا false برمیگردانند.
متد contains
متد Str::contains()
بررسی میکند که آیا substring یا حداقل یک عنصر از آرایهی substring های داده شده به عنوان آرگومان دوم در استرینگ اصلی وجود دارد یا نه.
use Illuminate\Support\Str; if (Str::contains("My name is Mohsen", "Mohsen")) { echo "Mohsen Exists in string";}// Mohsen Exists in string if (Str::contains("Ali and Reza and Javad are freinds", ["Reza", "Naghi", "Taghi"])) { echo "At least one of the provided names exists in string";}// At least one of the provided names exists in string
متد containsAll
در متد Str::containsAll()
آرگومان دوم آرایه است و برعکس متد Str::contains()
که وجود تنها یک عنصر آن در استرینگ اصلی کافی بود اینجا تمام عناصر آرایه باید در استرینگ اصلی موجود باشند. آرگومان سوم در صورت وجود باید bool باشد و به معنای ignore case است. مقدار پیشفرض آن false است.
use Illuminate\Support\Str; $result = Str::containsAll('Ali Mohsen Reza doost hastand.', ["Ali", "Mohsen", "Reza"]);// true $result = Str::containsAll('Ali Mohsen Reza doost hastand.', ["Ali", "Mohsen", "reza"]);// false $result = Str::containsAll('Ali Mohsen Reza doost hastand.', ["Ali", "Mohsen", "reza"], true);// true
متد startsWith
متد Str::startsWith()
به عنوان آرگومان دوم یک استرینگ و یا آرایهای از استرینگها دریافت میکند. اگر استرینگ اصلی با استرینگ آرگومان دوم و یا یکی از عناصر آرایهی موجود در آرگومان دوم شروع شده باشد متد true
و در غیر این صورت false
برمیگرداند.
use Illuminate\Support\Str; $result = Str::startsWith("Man mohsen hastam", "Man");// true $result = Str::startsWith("I love you", ["I", "We", "They"]);// true $result = Str::startsWith("What is your name?", "Ali");// false
متد endsWith
متد Str::endsWith()
به مانند متد Str::startsWith()
به عنوان آرگومان دوم یک استرینگ و یا آرایهای از استرینگها میگیرد. اگر استرینگ اصلی به استرینگ آرگومان دوم و یکی یکی از عناصر آرگومان دوم خاتمه یافته باشد متد مقدار true
و در غیر این صورت false
برمیگرداند.
use Illuminate\Support\Str; $result = Str::endsWith("Are you Reza", "Reza");// true $result = Str::endsWith("I love Laravel", ["Kate", "Sara", "Susan"]);// false $result = Str::endsWith("This is my site.", ["table", "site."]);// true
به نقطهی قرار گرفته در انتهای site توجه کنید. استرینگ نه بهsite
بلکه به site.
ختم میشود.
متد isUrl
Str::isUrl()
بررسی میکند که آیا استرینگ داده شده یک URL صحیح است یا نه. به عنوان آرگومان دوم میتوان به متد آرایهای از پرتوکلهای مورد قبول را داد.
use Illuminate\Support\Str; $result = Str::isUrl('http://dokaj.com');// true $result = Str::isUrl('http://dokaj.com', ['https']);// false $result = Str::isUrl("ftp://user:password@server/pathname");// true $result = Str::isUrl("ftp://user:password@server/pathname", ['http', 'https']);// false
در مثال سوم توجه کنید که استرینگ اصلی شامل url یک آدرس ftp است و متد آن را به عنوان یک url صحیح شناسایی کرده است ولی در مثال آخر با محدود کردن پروتوکلهای مورد قبول توسط آرایهی آرگومان دوم دیگر آن را به عنوان یک url صحیح نمیشناسد و false
برمیگرداند.
متد isAscii
Str::isAscii()
در صورتی که تمام کاراکترهای استرینگ اصلی جزو کاراکترهای اسکی (۷ بیتی) باشند true
و در غیر این صورت false
برمیگرداند.
use Illuminate\Support\Str; $result = Str::isAscii('Man mohsen hastam');// true $result = Str::isAscii('Pouvez-vous répéter s’il vous plaît?');// false
متد isJson
Str::isJson()
بررسی میکند که آیا استرینگ داده شده یک استرینگ json صحیح و سالم هست یا نه.
use Illuminate\Support\Str; $result = Str::isJson('[1, 3, 5]');// true $result = Str::isJson("{'name': 'Mohsen', 'Family': 'Safari'}");// false $result = Str::isJson('{"name": Mohsen, "Family": Safari}');// false $result = Str::isJson('{"name": "Mohsen", "Family": "Safari"}');// true
متد isUuid
متد Str::isUuid()
بررسی میکند که آیا استرینگ ورودی یک UUID صحیح هست یا نه.
use Illuminate\Support\Str; $result = Str::isUuid('550e8400-e29b-41d4-a716-446655440000');// true $result = Str::isUuid('113059749145936325402354257176981405696');// false // removing hypens$result = Str::isUuid('550e8400e29b41d4a716446655440000');// false $result = Str::isUuid("Mohsen");// false
متد isUlid
Str::isUlid()
بررسی میکند که آیا استرینگ ورودی یک ULID صحیح هست یا نه.
use Illuminate\Support\Str; $result = Str::isUlid('01ARZ3NDEKTSV4RRFFQ69G5FAV');// true $result = Str::isUlid('01G65Z755AFWAKHE12NY0CQ9FH');// true
متد is
Str::is()
استرینگ اصلی را با یک pattern مقایسه میکند. چنانچه استرینگ اصلی به طور کامل منطبق بر الگو باشد true
و در غیر این صورت false
برمیگرداند. برخلاف اکثر متدهای بررسی شده، در متد Str::is()
استرینگ اصلی به عنوان آرگومان دوم وارد میشود و pattern آرگومان اول است.
به نظر میرسد در pattern تنها مجاز به استفاده از *
هستیم(؟)
use Illuminate\Support\Str; $result = Str::is('Mo*en', 'Mohsen');// true $result = Str::is('en', 'Mohsen');// false $result = Str::is('M*n', 'Mohsen');// true
کوتاه کردن استرینگ داده شده
متد limit: حذف بیشتر از چند کاراکتر
Str::limit()
از رشتهی اصلی تعداد n کاراکتر را که به عنوان آرگومان دوم به آن دادهایم برمیگرداند. به جای قسمت حذف شده یا ... میگذارد و یا مقداری که در آرگومان سوم ارسال کردهایم را قرار میدهد.
use Illuminate\Support\Str; $result = Str::limit('123456789', 5);// 12345... $result = Str::limit('123456789', 5, ' and more');// 12345 and more
متد words: حذف بیشتر از چند کلمه
Str::words()
تعداد n کلمه _ که در آرگومان دوم مشخص شده است _ از استرینگ اصلی را برمیگرداند. به جای قسمت حذف شده یا ... قرار میگیرد و یا مقداری که به عنوان آرگومان سوم به متد ارسال کردهایم.
use Illuminate\Support\Str; $result = Str::words('Che roozagare ajibi shode. hich chiz sare jash nist', 3);// Che roozagare ajibi... $result = Str::words('Che roozagare ajibi shode. hich chiz sare jash nist', 3, '... Bikhiyal hosele nadaram.');// Che roozagare ajibi... Bikhiyal hosele nadaram.
متد excerpt: حذف قبل و بعد
متد Str::excerpt()
ابتدا اولین رخداد substring که به عنوان آرگومان دوم به متد ارسال کردهایم را پیدا میکند. سپس شعاع یا radius که آن را در آرایهای به عنوان آرگومان سوم به متد فرستادهایم را میخواند و سپس از نقطهی radius کاراکتر قبل از رخداد substring تا radius کاراکتر بعد از پایان substring را بر میگرداند. به جای ابتدا و انتهای حذف شده ... و یا مقدار فراهم شده در کلید omission از آرایهی آرگومان سوم را قرار میدهد.
اگر radius را به متد ندهیم به صورت پیشفرض آن را ۱۰۰ در نظر میگیرد.
use Illuminate\Support\Str; $result = Str::excerpt('12345678901112131415161718192021222324252627282930', '171819', ['radius' => 5]);// ...4151617181920212... $result = Str::excerpt('12345678901112131415161718192021222324252627282930', '171819', ['radius' => 5, 'omission' => '(...)']);// (...)4151617181920212(...) $result = Str::excerpt('Man mohsen hastam. Mohsen dar tehran zendegi mikonad', 'Mohsen', ['radius' => 5, 'omission' => '(...)']);// Man mohsen hast(...)
گرفتن substring از استرینگ اصلی
گرفتن substring از ابتدا و انتها
متد take: گرفتن substring از ابتدا و انتها
متد Str::take()
به عنوان آرگومان دوم طول رشتهای را میگیرد که باید از ابتدا یا انتهای استرینگ اصلی برگرداند. اگر این آرگومان مثبت باشد substring از ابتدا و اگر منفی باشد از انتهای استرینگ اصلی برگردانده میشود.
use Illuminate\Support\Str; $result = Str::take('123456789', 5);// 12345 $result = Str::take('123456789', -5);// 56789
گرفتن substring از هر جا؛ با اندیس شروع و طول مشخص یا پایان مشخص
متد substr
با متد Str::substr()
میتوان substring ای از اندیس مشخص و به طول مشخص از استرینگ اصلی استخراج کرد. اگر آرگومان دوم یعنی اندیس شروع substring منفی باشد نقطهی شروع را از انتهای استرینگ اصلی محاسبه میکند و اگر آرگومان سوم یعنی طول رشته منفی باشد این جا دیگر معنی طول رشته نمیدهد بلکه به معنای اندیس پایان substring نسبت به انتهای استرینگ اصلی است.
توجه به این نکته مفید است که اندیسها نسبت به آغاز استرینگ از 0
و نسبت به پایان استرینگ از -1
شروع میشوند.
use Illuminate\Support\Str; echo Str::substr('0123456789', 4, 3);// 456 echo Str::substr('0123456789', -8, 3);// 234 echo Str::substr('0123456789', 4, -3);// 456 echo Str::substr('0123456789', -8, -3);// 23456
گرفتن substring: قبل، بعد، وسط
متد before
متد Str::before()
به عنوان آرگومان دوم یک substring از استرینگ اصلی را میگیرد و هر چه که قبل از اولین رخداد این substring در استرین اصلی وجود دارد را بر میگرداند.
use Illuminate\Support\Str; echo Str::before('0123456789-0123456789', '456');// 0123 echo Str::before('My name is Mohsen', 'Mohsen');// My name is echo Str::before('My name is Mohsen. I have a freind whose name is Mohsen', 'Mohsen');// My name is echo Str::before('What is your name?', 'Ali');// What is your name?
در مثال آخر میبینید که چنانچه اگر substring در استرینگ اصلی وجود نداشته باشد، متد کل استرینگ اصلی را برمیگرداند.
متد beforeLast
Str::beforeLast()
آنچه که قبل از آخرین رخداد substring وارد شده در آرگومان دوم واقع شده است را برمیگرداند؛ بر خلاف متد Str::before()
که متن قبل از اولین رخداد substring را برمیگرداند.
use Illuminate\Support\Str; echo Str::beforeLast('0123456789-0123456789', '456');// 0123456789-0123 echo Str::beforeLast('0123456789-0123456789', 'ali');// 0123456789-0123456789
مشاهده میکنید که همانند Str::before()
اگر substring در استرینگ اصلی نباشد این متد هم کل استرینگ اصلی را برمیگرداند.
متد after
Str::after()
هر آنچه را که در استرینگ اصلی بعد از اولین رخداد substring وارد شده در آرگومان دوم قرار گرفته است را برمیگرداند. اگر substring در استرینگ اصلی وجود نداشته باشد مانند تمام متدهای این خانواده کل استرینگ اصلی سالم و دست نخورده برگشت داده میشود.
use Illuminate\Support\Str; echo Str::after('0123456789-0123456789', 123);// 456789-0123456789 echo Str::after('0123456789-0123456789', 'ali reza');// 0123456789-0123456789
متد afterLast
متد Str::afterLast()
هر آنچه را که بعد از آخرین رخداد substring وارد شده به عنوان آرگومان دوم در استرینگ اصلی قرار گرفته باشد را برمیگرداند. مانند تمام متدهای این خانواده، این متد نیز چنانچه substring در استرینگ اصلی وجود نداشته باشد کل استرینگ اصلی را برمیگرداند.
use Illuminate\Support\Str; echo Str::afterLast('0123456789-0123456789', '345');// 6789 echo Str::afterLast('0123456789-0123456789', 'ali reza amini');// 0123456789-0123456789
متد between
متد Str::between()
هر آنچه را که در استرینگ اصلی مابین اولین رخداد substring اول و آخرین رخداد substring دوم قرار گرفته باشد را برمیگرداند. به عبارت دیگر این متد کاملا حریصانه عمل میکند و همیشه بزرگترین رشتهای را که بتواند انتخاب میکند.
این موارد را نیز در نظر داشته باشید:
- اگر substring اول در استرینگ اصلی نباشد از ابتدا تا محل آخرین رخداد substring دوم برگشت داده میشود.
- اگر substring دوم در استرینگ اصلی موجود نباشد از بعد از اولین رخداد substring اول تا انتهای استرینگ اصلی را برمیگرداند.
- اگر هر دو substring ناموجود باشند کل استرینگ اصلی برمیگردد.
تمام آنچه گفته شد را در کد زیر مشاهده میکنید:
use Illuminate\Support\Str; echo Str::between('0123456789-0123456789-0123456789', '234', '789');// 56789-0123456789-0123456 echo Str::between('0123456789-0123456789-0123456789', 'ali', '789');// 0123456789-0123456789-0123456 echo Str::between('0123456789-0123456789-0123456789', '234', 'ali');// 56789-0123456789-0123456789 echo Str::between('0123456789-0123456789-0123456789', 'mohsen', 'ali');// 0123456789-0123456789-0123456789
متد betweenFirst
Str::betweenFirst()
مشابه متد Str::between()
است با این تفاوت که حریص نیست. هر آنچه را که بین اولین رخداد substring اول و اولین رخداد substring دوم قرار گرفته باشد را برمیگرداند.
این موارد را نیز در نظر داشته باشید:
- اگر substring اول در استرینگ اصلی نباشد از ابتدا تا محل اولین رخداد substring دوم برگشت داده میشود.
- اگر substring دوم در استرینگ اصلی موجود نباشد از بعد از اولین رخداد substring اول تا انتهای استرینگ اصلی را برمیگرداند.
- اگر هر دو substring ناموجود باشند کل استرینگ اصلی برمیگردد.
تمام آنچه گفته شد را در کد زیر مشاهده میکنید:
use Illuminate\Support\Str; echo Str::betweenFirst('0123456789-0123456789-0123456789', '234', '789');// 56 echo Str::betweenFirst('0123456789-0123456789-0123456789', 'ali', '789');// 0123456 echo Str::betweenFirst('0123456789-0123456789-0123456789', '234', 'ali');// 56789-0123456789-0123456789 echo Str::betweenFirst('0123456789-0123456789-0123456789', 'mohsen', 'ali');// 0123456789-0123456789-0123456789
تغییر شکل دادن استرینگ
متد apa
Str::apa()
استرینگ ورودی را بر مبنای دستورالعملهای APA به فرم Title Case تبدیل میکند.
use Illuminate\Support\Str; echo Str::apa('I have a dog');// I Have a Dog echo Str::apa('The quick brown fox jumps over the lazy dog')// The Quick Brown Fox Jumps Over the Lazy Dog
متد ascii: تبدیل یک string به رشتهای از کاراکترهای ascii
با متد Str::ascii()
میتوان یک رشته که شامل کاراکترهای غیر اسکی است را به رشتهای با کاراکترهای تمام اسکی تبدیل کرد. رشتهی حاصل معنی بدهد یا ندهد بحث دیگری است!
use Illuminate\Support\Str; $text = Str::ascii('Pouvez-vous répéter s’il vous plaît?');// Pouvez-vous repeter s'il vous plait?
متد slug
Str::slug()
یک استرینگ Url freindly از استرینگ اصلی میسازد.
use Illuminate\Support\Str; echo Str::slug('welcmoe to my website');// welcmoe-to-my-website echo Str::slug("WHaT arE you Doing?");// what-are-you-doing echo Str::slug("AreYouReady");// areyouready echo Str::slug("areYouReady");// areyouready echo Str::slug("this_was_snake_case");// this-was-snake-case
متدهای بر مبنای پوزیشن
متد charAt
با متد Str::charAt()
میتوان کاراکتر واقع در اندیس مشخص شده را به دست آورد. اگر عدد، مثبت باشد آن را نسبت به ابتدا و اگر منفی باشد نسبت به انتهای استرینگ محاسبه میکند. اگر اندیس نامعتبر باشد یعنی در محدودهی طول رشته (چه مثبت و چه منفی) نباشد، متد false
برمیگرداند.
use Illuminate\Support\Str; echo Str::charAt('Mohsen', 2);// h echo Str::charAt("Mohsen", -2);// e $result = Str::charAt("Mohsen", 15);// false
متد position: یافتن اندیس اولین رخداد یک substring در استرینگ اصلی
با متد Str::position()
میتوان اندیس اولین رخداد یک substring (که توسط آرگومان دوم فراهم میشود) را در استرینگ اصلی پیدا کرد. اگر substring در استرینگ اصلی ناموجود باشد متد مقدار false
برمیگرداند.
use Illuminate\Support\Str; echo Str::position('0123456789-01234567890', '345');// 3 Str::position('0123456789-0123456789', '432');// false
signular/ plural
متد plural
Str::plural()
فرم جمع یا plural استرینگ داده شده را برمیگرداند. این متد فقط در مورد زبانهایی که توسط Laravel Pluralizer پشتیبانی میشوند کارایی دارد. به عنوان آرگومان دوم میشود به آن یک عدد داد. اگر عدد 1
باشد فرم Singular و اگر عدد 0
و یا بیشتر از 1
باشد فرم Plural را برمیگرداند.
use Illuminate\Support\Str; echo Str::plural('child');// echo Str::plural('child'); echo Str::plural('person');// people echo Str::plural('foot', 0);// feet echo Str::plural('foot', 1);// foot echo Str::plural('foot', 2);// feet
متد pluralStudly
متد Str::pluralStudly()
استرینگی را که به فرم StudyCase فرمتبندی شده است را به همین فرمت به شکل plural درمیآورد. به مانند متد Str::plural()
این متد نیز به عنوان آرگومان دوم میتواند یک عدد بگیرد. اگر 1
باشد فرم Singular و اگر 0
یا بیشتر از 1
باشد فرمت Plural StudlyCase استرینگ را برمیگرداند.
این متد نیز همانند متد Str::plural()
فقط در مورد زبانهایی که توسط Laravel Pluralizer پشتیبانی میشوند کارایی دارد.
use Illuminate\Support\Str; echo Str::pluralStudly("SpiderMan");// SpiderMen echo Str::pluralStudly("NotificationEmail", 19);// NotificationEmails echo Str::pluralStudly('HumanRight', 3);// HumanRights
⚠ به نظر من متد زیاد قدرتمندی نیست. شاید بعدها نظرم تغییر کند.
متد singular
Str::singular()
فرم singular استرینگ وارد شده را برمیگرداند. این متد نیز مانند دو متد فوق در مورد زبانهایی که توسط Laravel Pluralizer پشتیبانی میشوند کارایی دارد.
use Illuminate\Support\Str; echo Str::singular('people');// person
کار با white space ها
متد squish
متد Str::squish()
تمام white spaceها و \n
ها و تمام کاراکترهای غیر اصیل را از ابتدا و انتها و میانهی استرینگ حذف میکند.
شاید با ذکر یک مثال بیشتر متوجه عملکرد این متد شوید.
use Illuminate\Support\Str; echo Str::squish(" \t man \t\nmnb");// man mnb echo Str::squish(" \t \tman\ \t \n too \n");// man\ too
متد trim
⚠ این متد در لاراول ۱۱ در دسترس است.
متد Str::trim()
تمامی white space ها به شمول \n
را از ابتدا و انتهای استرینگ حذف میکند.
use Illuminate\Support\Str; echo Str::trim("\n\n \t salam \t\n\n\t ");// salam echo Str::trim("\n\n \t ajab \n\n\t...test");/* ajab ...test*/
متد ltrim
⚠ این متد در لاراول ۱۱ در دسترس است.
متد Str::ltrim()
تمامی white space ها به شمول \n
را از سمت چپ استرینگ حذف میکند.
use Illuminate\Support\Str; echo Str::ltrim("\n \t \n\n man \t\t\t");// man ⏎ echo Str::ltrim("\n \t \n\n man \t\t\t man2");// man man2
متد rtrim
⚠ این متد در لاراول ۱۱ در دسترس است.
متد Str::rtrim()
تمامی white space ها به شمول \n
را از سمت راست استرینگ حذف میکند.
use Illuminate\Support\Str; $result = Str::rtrim("\n\n\n \t man \n\n\t \t\n");echo Str::wrap($result, '<', '>');/*< man>*/
Markdown
متد inlineMarkdown
متد Str::inlineMarkdown()
استرینگ داده شده که باید منطبق با GitHub flavored Markdown باشد را به HTML تبدیل میکند. این متد خروجی را عینا برمیگرداند و آن را در هیچ تگی wrap نمیکند.
use Illuminate\Support\Str; echo Str::inlineMarkdown('<i>"italic"</i> **bold**');// <i>"italic"</i> <strong>bold</strong> echo Str::inlineMarkdown("<i>'italic'</i> **bold**");// <i>'italic'</i> <strong>bold</strong>
هنگام تبدیل markdown ارسالی توسط کاربر بسیار محتاط باشید. در مثال بالا میبینید که کاربر تگ <i>"italic"</i>
را وارد کرده است و این تگ عینا در خروجی تکرار شده است. همچنین اگرچه " "
کد شده است ولی ' '
بیتغییر در خروجی آمده است.
برای ممنوع کردن ارسال تگ HTML توسط کاربر آرایهای را به عنوان آرگومان دوم به متد ارسال میکنیم که شامل کلید و مقدار 'html_input' => 'strip'
است. این عبارت به متد فرمان میدهد که تگهای HTML را از خروجی حذف کند و فقط مقدار مابین تگها را حفظ کند.
use Illuminate\Support\Str; echo Str::inlineMarkdown("<i>'italic'</i> **bold**", ['html_input' => 'strip']);// 'italic' <strong>bold</strong>
متد markdown
متد Str::markdown()
مشابه Str::inlineMarkdown()
است و استرینگ داده شده که باید منطبق با GitHub flavored Markdown باشد را به HTML تبدیل میکند، با این تفاوت که خروجی را در میان تگ <p></p>
قرار میدهد.
use Illuminate\Support\Str; echo Str::markdown('<i>"italic"</i> **bold**');// <p><i>"italic"</i> <strong>bold</strong></p> echo Str::markdown("<i>'italic'</i> **bold**");// <p><i>'italic'</i> <strong>bold</strong></p>
هنگام تبدیل markdown ارسالی توسط کاربر بسیار محتاط باشید. در مثال بالا میبینید که کاربر تگ <i>"italic"</i>
را وارد کرده است و این تگ عینا در خروجی تکرار شده است. همچنین اگرچه " "
کد شده است ولی ' '
بیتغییر در خروجی آمده است.
برای ممنوع کردن ارسال تگ HTML توسط کاربر آرایهای را به عنوان آرگومان دوم به متد ارسال میکنیم که شامل کلید و مقدار 'html_input' => 'strip'
است. این عبارت به متد فرمان میدهد که تگهای HTML را از خروجی حذف کند و فقط مقدار مابین تگها را حفظ کند.
use Illuminate\Support\Str; echo Str::markdown("<i>'italic'</i> **bold**", ['html_input' => 'strip']);// <p>'italic' <strong>bold</strong></p>
جایگزینیها
متد replace
متد Str::replace()
تمام رخدادهای یک استرینگ را با یک استرینگ دیگر جایگزین میکند. به صورت پیشفرض عملیات یافتن استرینگ جهت جایگزینی به صورت case sensitive انجام میشود ولی با وارد کردن caseSensitive: false
در هنگام فراخوانی متد میتوان تمام رخدادها رافارغ از حروف بزرگ یا حروف کوچک جایگزین کرد.
use Illuminate\Support\Str; echo Str::replace('the', 'THE', 'the cat jumps over the dog');// THE cat jumps over THE dog echo Str::replace('the', 'THE', 'ThE cat jumps over THe dog');// ThE cat jumps over THe dog echo Str::replace('the', 'THE', 'ThE cat jumps over THe dog', caseSensitive: false);// THE cat jumps over THE dog
در مثال دوم هیچ جایگزینیای صورت نگرفته است برای اینکه جایگزینی به صورت case sensitive انجام میشود. در مثال سوم با وارد کردن caseSensitive: false
به لاراول میفهمانیم که در جایگزینی کوچکی و بزرگی حروف مهم نیست.
متد replaceFirst
Str::replaceFirst()
فقط و فقط اولین رخداد یک استرینگ را با استرینگ دیگری جایگزین میکند و استرینگ حاصل را برمیگرداند. عملیات یافتن به صورت case sensitive انجام میشود.
use Illuminate\Support\Str; echo Str::replaceFirst('1', '<1>', '123-123-123');// <1>23-123-123 echo Str::replaceFirst('the', 'THE', 'The cat jumps over The dog');// The cat jumps over The dog
در مثال آخر به علت case sensitive بودن عملیات یافتن استرینگ، هیچ جایگزینیای صورت نگرفته است.
متد replaceLast
متد Str::replaceLast()
آخرین رخداد یک استرینگ را با استرینگ دیگر جایگزین میکند. عملیات یافتن به صورت case sensitive انجام میشود.
use Illuminate\Support\Str; echo Str::replaceLast('3', '<3>', '123-123-123');// 123-123-12<3> echo Str::replaceLast('The', 'THE', 'the cat jumps over the dog');// the cat jumps over the dog
در مثال آخر چون The به همین صورت و به همین case یافت نشده است لذا هیچ جایگزینیای نیز صورت نگرفته است.
متد replaceStart
متد Str::replaceStart()
یک استرینگ را فقط و فقط زمانی که آن استرینگ در ابتدای استرینگ اصلی واقع شده باشد با استرینگ دیگری جایگزین میکند. با کمی دقت میتوان دریافت که این متد به نوعی Str::replaceFirst()
را در درون خود دارد به علاوهی این شرط که اولین رخداد لزوما باید در ابتدای استرینگ اصلی واقع شده باشد.
use Illuminate\Support\Str; echo Str::replaceStart('1', '<1>', '123-123-123');// <1>23-123-123 echo Str::replaceStart('3', '<3>', '123-123-123');// 123-123-123 echo Str::replaceStart('9', '<9>', '123-123-123');// 123-123-123
متد replaceEnd
متد Str::replaceEnd()
در واقع تلفیقی از متد Str::replaceLast()
به علاوهی یک شرط مهم است و آن شرط این است که آخرین رخداد استرینگ باید دقیقا در آخر استرینگ اصلی قرار گرفته باشد.
use Illuminate\Support\Str; echo Str::replaceEnd('23', '<23>', '123-123-123');// 123-123-1<23> echo Str::replaceEnd('12', '<12>', '123-123-123');// 123-123-123
متد replaceMatches
در متد Str::replaceMatches()
بجای این که صراحتا یک استرینگ بگیرد تا آن را با استرینگ دیگری جایگزین کند یک regular expression میگیرد. روند کار ساده است. مثالهای زیر را ببینید.
use Illuminate\Support\Str; echo Str::replaceMatches('/1[^-]*3/','[]', '123-1234-1256-123456');// []-[]4-1256-[]456 echo Str::replaceMatches('/.a.a/', '[DELETED]', 'man va sara va dara be koh raftim');// man va [DELETED] va [DELETED] be koh raftim echo Str::replaceMatches('/.a.a/', '[DELETED]', 'man va sAra va dara be koh raftim');// man va sAra va [DELETED] be koh raftim echo Str::replaceMatches('/.a.a/i', '[DELETED]', 'man va sAra va dara be koh raftim');// man va [DELETED] va [DELETED] be koh raftim echo Str::replaceMatches('/.a.a/i', '[\0]', 'man va sara va dara be koh raftim');man va [sara] va [dara] be koh raftim
میتوان به این متد به عنوان آرگومان دوم یک Closure ارسال کرد. ورودی این تابع آرایهای از موارد یافته شده و آمادهی جایگزینی است.
use Illuminate\Support\Str; echo Str::replaceMatches('/.a.a/', function (array $matches) { return strtoupper($matches[0]);}, 'man va sara va dara be koh raftim'); // man va SARA va DARA be koh raftim
📝 برای درک بهتر این متد، مستندات تابع preg_replace را مطالعه کنید.
متد replaceArray
متد Str::replaceArray()
رخدادهای یک استرینگ را به ترتیب با عناصر یک آرایه جایگزین میکند.
use Illuminate\Support\Str; echo Str::replaceArray('?', ['Sara', 'Dara'], 'man va ? va ? be koh raftim');// man va Sara va Dara be koh raftim echo Str::replaceArray('#', [1, 2, 3], 'arg# & arg# & arg# & arg#');// arg1 & arg2 & arg3 & arg#
در مثال آخر میبینید که عملیات جایگزینی بعد از به کار رفتن آخرین عنصر آرایه متوقف میشود.
متد substrReplace
Str::substrReplace()
احتمالا یکی از مفیدترین متدهای این کلاس است. نحوه کار این متد را با دو سناریوی زیر توضیح میدهیم:
- اگر با سه آرگومان فراخوانده شود یک اندیس را به عنوان آرگومان سوم میگیرد و از آن اندیس تا انتهای استرینگ اصلی را پاک میکند و سپس استرینگ داده شده به عنوان آرگومان دوم را به انتهای آن اضافه میکند.
- اگر با چهار آرگومان فراخوانده شود از اندیس وارد شده به عنوان آرگومان سوم به تعداد آرگومان چهارم از استرینگ اصلی را حذف میکند و سپس در گپ حاصل استرینگ داده شده به عنوان آرگومان دوم را قرار میدهد.
👌 واضح است که اگر آرگومان چهارم
0
باشد هیچ جزئی از استرینگ اصلی حذف نمیشود و فقط استرینگ داده شده به عنوان آرگومان دوم در اندیس وارد شده به عنوان آرگومان سوم در استرینگ اصلی قرار میگیرد.
اجرای کد از توضیحات آن سادهتر است!
use Illuminate\Support\Str; echo Str::substrReplace('123456', ':', 2);// 12: echo Str::substrReplace('123456', ':', 2, 2);12:56 echo Str::substrReplace('123456', ':', 2, 0);12:3456
متد swap
متد Str::swap()
یک آرایه شامل کلید/ مقدار را به عنوان آرگومان اول میگیرد و در سپس استرینگ اصلی که به عنوان آرگومان دوم وارد شده است جای کلید، مقدار را قرار میدهد.
use Illuminate\Support\Str; echo Str::swap([ ':name' => 'mohsen', ':age' => '42', ':city' => 'tehran',], ':name, :age darad va dar :city zendegi mikonad.') // mohsen, 42 darad va dar tehran zendegi mikonad.
ایجاد Uuid
متد uuid
با متد Str::uuid()
میتوان یک UUID نسخهی ۴ تولید کرد.
use Illuminate\Support\Str; echo Str::uuid();// 058bab4c-dee8-4a5b-9dc2-97da4860d505 echo Str::uuid();// 82184b91-3389-4bc7-b60d-c8329423f38d
متد createUuidsUsing: تولید UUID با استفاده از Closure دلخواه
گاهی اوقات مثلا در فرآیند تست نرمافزار لازم است که منطق تولید UUID در دست خودمان باشد؛ مثلا در هنگام نیاز متد Str::uuid()
همیشه یک کد برگرداند. در این مواقع از متد Str::createUuidsUsing()
استفاده میکنیم. این متد به عنوان تنها آرگومان ورودی یک Closure میگیرد که باید یک کد UUID برگرداند.
use Illuminate\Support\Str;use Ramsey\Uuid\Uuid; echo Str::uuid();// 5c12c356-cc5a-4432-8f8e-48241bc15116 echo Str::uuid();// d1ab8cf4-f3a3-4565-a7b4-201dbbdc128d Str::createUuidsUsing(function () { return Uuid::fromString('eadbfeac-5258-45c2-bab7-ccb9b5ef74f9');}); echo Str::uuid();// eadbfeac-5258-45c2-bab7-ccb9b5ef74f9 echo Str::uuid();// eadbfeac-5258-45c2-bab7-ccb9b5ef74f9
در دو مثال اول با هر بار فراخوانی Str::uuid()
یک کد uuid منحصر به فرد دریافت میکنیم ولی بعد از فراخوانی متد Str::createUuidsUsing()
با Closure وارد شده که همیشه یک uuid برمیگرداند این بار بر خلاف گذشته متد Str::uuid()
دیگر فقط همان uuid تکراری را برمیگرداند.
متد createUuidsNormally: بازگرداندن منطق تولید uuid به حالت طبیعی
اما بعد از استفاده از Str::createUuidsUsing()
گاهی اوقات لازم است منطق تولید کد uuid به حالت طبیعی بازگردد. این کار با استفاده از متد Str::createUuidsNormally()
انجام میشود. این متد هیچ پارامتری ندارد.
use Illuminate\Support\Str;use Ramsey\Uuid\Uuid; Str::createUuidsUsing(function () { return Uuid::fromString('eadbfeac-5258-45c2-bab7-ccb9b5ef74f9');}); echo Str::uuid();// eadbfeac-5258-45c2-bab7-ccb9b5ef74f9 echo Str::uuid();// eadbfeac-5258-45c2-bab7-ccb9b5ef74f9 Str::createUuidsNormally(); echo Str::uuid();// 8dfde703-4621-4924-a3b8-2922479655a1 echo Str::uuid();// 9307346c-2bbe-498e-acdd-eae5cad45f9e
ایجاد ulid
متد ulid
با متد Str::ulid()
میتوان یک کد ulid تولید کرد.
use Illuminate\Support\Str; echo Str::ulid();// 01HVDTMDCZT2BSS3929HHV6X0W echo Str::ulid();// 01HVDTN3GK2HVN3RH3K2TZF98E
ulid اطلاعات زمان تولیدش را در خود نگهداری میکند برای بازیابی این اطلاعات به شیوهی زیر عمل میکنیم.
use Illuminate\Support\Str;use Illuminate\Support\Carbon; $ulid = '01gd6r360bp37zj17nxb55yv40';$date = Carbon::createFromId($ulid); echo $data;/*Illuminate\Support\Carbon @1663452682 {#5134 date: 2022-09-17 22:11:22.251 +00:00, }*/
متد createUlidsUsing: رجیستر کردن تابع دلخواه برای تولید کد ulid
مانند متدهای مربوط به uuid در سری متدهای ulid هم متدی جهت کنترل نحوهی تولید کد ulid توسط متد Str::ulid()
وجود دارد. با Str::createUlidsUsing()
میتوان یک closure را رجیستر کرد که در پشت صحنه با هر بار فراخوانی Str::ulid()
فراخوانده شود و وظیفهاش برگرداندن کد ulid باشد.
use Illuminate\Support\Str;use Symfony\Component\Uid\Ulid; echo Str::ulid();// 01HVDWMWNEV93D777TRZVK49XQ echo Str::ulid();// 1HVDWNJG8CP9H3DZTG5QGW8GQ Str::createUlidsUsing(function () { return new Ulid('01HRDBNHHCKNW2AK4Z29SN82T9');}); echo Str::ulid();// 01HRDBNHHCKNW2AK4Z29SN82T9 echo Str::ulid();// 01HRDBNHHCKNW2AK4Z29SN82T9
در مثالهای بالا ملاحظه میفرمایید که بعد از رجیستر کردن یک closure در هر بار فراوانی متد Str::ulid()
کد ulid فراهم شده توسط closure برگردانده میشود.
متد createUlidsNormally: برگرداندن منطق تولید کد ulid به حالت پیشفرض
همانطور که دیدیم بعد از رجیستر کردن یک تابع توسط متد Str::createUlidsUsing()
در پشت صحنه متد Str::ulid()
آن تابع را فراخوانده و کد برگشتی آن را به عنوان نتیجهی متد برگشت میدهد. اما گاهی اوقات لازم است که این زنجیره را قطع کنیم و متد Str::ulid()
شخصا و بدون نیاز به هیچ تابع ثانویهای کد ulid را تولید کند. با متد Str::createUlidsNormally()
میتوان روند تولید کدهای ulid را به حالت طبیعی برگرداند.
use Illuminate\Support\Str;use Symfony\Component\Uid\Ulid; Str::createUlidsUsing(function () { return new Ulid('01HRDBNHHCKNW2AK4Z29SN82T9');}); echo Str::ulid();// 01HRDBNHHCKNW2AK4Z29SN82T9 echo Str::ulid();// 01HRDBNHHCKNW2AK4Z29SN82T9 Str::createUlidsNormally(); echo Str::ulid();// 01HVDXBZ0YB5XWE0G7DR65R51K echo Str::ulid();// 01HVDXCCHMNQQ756ST3ZRS07VG
به نظر میرسد که همه چیز به حالت طبیعی برگشته است!
پایان مطلب و نتیجهگیری
این مطلب مفصل و پُر توضیح و پُر مثال این جا به پایان میرسد. میتوانید توضیحات سایت لاراول برای کلاس Illuminate\Support\Str
را اینجا بخوانید. اگر چه شاکلهی مطلب من برگرفته از همین توضیحات است ولی دستهبندی متدها را برای فهم و راحت در ذهن نشستن مطلب تغییر اساسی دادم. توضیحات بیشتری ارائه دادم و جزئیاتی که به ذهنم میرسید و در سایت فوق به آن اشارهای نشده بود را هم اضافه بر توضیحات کردم و به جز دو یا سه مورد خاص مثالهای خود را ارائه دادم. به طور خلاصه بگویم که خویش را قانع کردم که نوشتن یادداشتی به چنین مفصلی در کنار توضیحات خوب سایت لاراول خالی از فایده نیست.
امیدوارم پس از خواندن این پست نظر هم نظر باشیم.
من محسن هستم؛ برنامهنویس سابق PHP و Laravel و Zend Framework و پایتون و فلسک. تمرکزم بیشتر روی لاراول بود! الان از صفر مشغول مطالعات اقتصادی هستم.
برای ارتباط با من یا در همین سایت کامنت بگذارید و یا به dokaj.ir(at)gmail.com ایمیل بزنید.
در مورد این مطلب یادداشتی بنویسید.