فهرست مستندات پروژه

تفاوت با persian-tools

Abzar0.8.1مشاهده منبعفارسی / انگلیسی

پوشش نمونه‌های upstream و تفاوت‌های عمدی ابزار با کتابخانه JavaScript.

تست‌های contract ابزار بخشی از نمونه‌های persian-tools را اجرا می‌کنند. این صفحه برای مهاجرت بین دو کتابخانه است، نه ادعای برابری کامل.

نمونه‌ها در tests/fixtures/persian-tools با SHA مشخص 25a2dc9f نگه‌داری می‌شوند. تست‌ها فایل و خط منبع را ثبت می‌کنند.

پوشش

فایل نمونهAPI ابزارکلاس تست
verifyIranianNationalId.spec.tsNationalId::validate()PersianToolsContractTest
verifyCardNumber.spec.tsCardNumber::validate()PersianToolsContractTest
sheba.spec.tsIban::validate(), Iban::bank()PersianToolsContractTest
phoneNumber.spec.tsPhoneNumber::validate(), operatorEnum()PersianToolsContractTest
findCapitalByProvince.spec.tsProvince::fromPersian()PersianToolsContractTest
bill.spec.tsBillId::validatePair()PersianToolsContractTest
verifyIranianLegalId.spec.tsLegalId::validate()LegalIdContractTest
NumberToWords.spec.tsNumberToWords::convert(), OrdinalNumber::toWord()NumberWordsContractTest
addOrdinalSuffix.spec.tsOrdinalNumber::addSuffix()NumberWordsContractTest
wordsToNumber.spec.tsWordsToNumber::parse()NumberWordsContractTest
addCommas.spec.tsNumberFormatter::withSeparators()FormattingContractTest
removeCommas.spec.tsNumberFormatter::withSeparators($s, '')FormattingContractTest
digits.spec.tsDigitConverter::toPersian() / toEnglish() / toArabic()FormattingContractTest
isPersian.spec.tsScript::isPersian(), Script::hasPersian()TextContractTest
isArabic.spec.tsScript::isArabic()TextContractTest
toPersianChars.spec.tsCharNormalizer::normalize()TextContractTest
halfSpace.spec.tsHalfSpaceFixer::fix()TextContractTest

تست نوع ورودی JavaScript معادل جداگانه ندارد چون امضای متدهای PHP تایپ دارد.

بخش‌های خارج از پوشش

  • تست slugify در upstream غیرفعال است. ورودی timeAgo تاریخ شمسی است؛ ابزار parser تقویم شمسی ندارد.
  • fuzzy parsing و moneyWordsToNumber در ابزار وجود ندارند.
  • گزینه‌های خروجی digits و addCommas با DigitConverter و NumberFormatter انجام می‌شوند. برای یکسان‌سازی متن ورودی از CharNormalizer استفاده کنید.
  • نمونه‌های extractCardNumber، getBankNameFromCardNumber، getPlaceByIranNationalId، numberplate، findProvinceFromCoordinate، remainingTime، removeOrdinalSuffix، textAnalyzer و URLfix هنوز به contract test منتقل نشده‌اند. وجود فایل fixture به معنی وجود API معادل نیست.

اعتبارسنج‌ها

کارت 1234567890123452 در ابزار معتبر و دارای هشدار CARD_NUMBER.UNKNOWN_BIN است؛ upstream آن را نامعتبر می‌داند. شماره 09802002580 هم در ابزار با هشدار PHONE_NUMBER.UNKNOWN_OPERATOR پذیرفته می‌شود. این دو تفاوت در unit testهای validator ثبت شده‌اند. جدول پلاک از داده upstream با تفاوت‌های ثبت‌شده در PlateCodes.php آمده است.

عدد و حروف

تفاوت‌های عمدی در registry تست‌ها با ورودی، خروجی هر دو کتابخانه و دلیل ثبت شده‌اند و تست هم خروجی ابزار و هم متفاوت ماندن آن را بررسی می‌کند.

ابزار صدگان را پیوسته می‌نویسد، مثل چهارصد و نهصد؛ صد تنها یکصد است و 10¹⁵ با کوادریلیون نوشته می‌شود. WordsToNumber شکل‌های جدا مثل چهار صد، صد، کوآدریلیون، شیش، چارصد و بیلیون را هم می‌خواند.

use Eram\Abzar\Format\{NumberToWords, WordsToNumber};

NumberToWords::convert(500443); // 'پانصد هزار و چهارصد و چهل و سه'
WordsToNumber::parse('منفی ۳ هزار'); // null
WordsToNumber::parse('سلام دنیا'); // null

upstream در برخی حالت‌ها کلمه غیرعددی را کنار می‌گذارد، رقم و حروف را مخلوط می‌پذیرد یا برای متن بدون عدد صفر می‌دهد. ابزار به جای حدس null می‌دهد. عدد ترتیبی منفی پذیرفته نیست و ORDINAL_NUMBER.NON_POSITIVE دارد. پسوند سی به صورت سی‌ام نوشته می‌شود. float و متن آزاد را روش مطمئن انتقال مبلغ ندانید.

نمایش و ارقام

در ابزار متد removeCommas وجود ندارد؛ NumberFormatter::withSeparators($s, '') string برمی‌گرداند و اعشار را نگه می‌دارد. DigitConverter بر اساس مقصد عمل می‌کند و هر دو گروه دیگر ارقام را تبدیل می‌کند، در حالی که upstream برای مبداهای مختلف متد جدا دارد.

متن و نیم‌فاصله

Script و CharNormalizer با نمونه‌های منتقل‌شده سازگارند. HalfSpaceFixer قاعده‌های محدودتری دارد:

  • بزرگ تر و بزرگ ترین را با نیم‌فاصله می‌نویسد.
  • پیشوندهای بی و هم را خودکار نمی‌چسباند؛ تشخیص معنی به واژه‌نامه نیاز دارد.
  • ترکیب‌هایی مثل به هر حال و این جا را به صورت ثابت اصلاح نمی‌کند.
  • فاصله‌های اضافه، trim و فاصله قبل از نشانه‌گذاری را اصلاح نمی‌کند؛ فقط فاصله هدف قاعده عوض می‌شود.

به‌روزرسانی نمونه‌ها

نگه‌دارندگان از composer fixtures:pull و SHA ثبت‌شده در tools/fixtures/SHA استفاده می‌کنند. تغییر pin باید همراه اجرای تست و بازبینی تفاوت‌ها باشد. جزئیات در راهنمای fixtureها است.

مطالب مرتبط: حروف به عدد، نمایش عدد، متن فارسی، اعتبارسنجی.

جستجو در مستندات

در همه پروژه‌ها جستجو کنید. با بستن این پنجره به راهنما برمی‌گردید.

Tab برای جابه‌جایی · Enter برای باز کردنEsc برای بستن