opilo / farsi
日期、数字和字符串的波斯语工具(支持Laravel验证)
Requires
- php: >=7.1.0
Requires (Dev)
- illuminate/filesystem: ~5.7.0|~5.8.0|^6.0|^7.0
- illuminate/translation: ~5.7.0|~5.8.0|^6.0|^7.0
- illuminate/validation: ~5.7.0|~5.8.0|^6.0|^7.0
- phpunit/phpunit: ^7.0|^8.0
- sallar/jdatetime: dev-master
Suggests
- laravel/framework: This package provides validation facilities for the Laravel Framework
README
此软件包为PHP开发者提供波斯语工具。它还引入了专门为Laravel开发者设计的验证设施。
贾拉利(希吉历)日期
JalaliDate
类表示伊朗日历。它根据此维基页面中引用的数据计算闰年。根据在tests/SallarJdatetimeTest.php
中进行的测试,对于1343年至1473年之间的年份,此日历中的闰年与基于提出的计算规则计算出的闰年完美匹配。但应考虑伊朗日历是基于天文观测的,与格鲁吉亚不同,它不是一个基于规则的日历。
以下代码演示了如何将DateTime
对象转换为JalaliDate
对象,然后按所需格式打印。您只需使用JalaliDate::fromDateTime()
方法,并查看JalaliFormatter::$conversionFunctions
数组,以了解应将什么传递给JalaliDate::format()
函数作为格式字符串。
use Opilo\Farsi\JalaliDate; $dateTime = \DateTime::createFromFormat('Y-m-d', '2015-09-03'); $jalaliDate = JalaliDate::fromDateTime($dateTime); print ($jalaliDate->format('D S M ماه سال X'));
输出结果为: 星期五,十二月初二,一千九百九十四年
以下示例代码演示了如何将表示贾拉利日期的数字输入转换为JalaliDate
,然后将其转换为DateTime
。如果您想验证用户的贾拉利日期输入,然后保存适当的标准时间戳到数据库中,这可能很有帮助。
use Opilo\Farsi\JalaliDate; $jalaliDate = new JalaliDate(1394, 6, 12); $dateTime = $jalaliDate->toDateTime(); print($dateTime->format('Y-m-d'));
输出结果为: 2015-09-03
方便的是,您还可以直接将具有已知格式的字符串直接转换为JalaliDate
use Opilo\Farsi\JalaliDate; $jalaliDate = JalaliDate::fromFormat('Y/m/d', '1394/6/20'); print($jalaliDate->format('D، d M y'));
上述代码的输出为: 星期五,九月二十,94
请注意,如果您尝试构造一个无效的JalaliDate
,将抛出InvalidArgumentException
异常。
JDateTime类
JDateTime
类是具有时间(小时、分钟、秒)支持的JalaliDate
类的扩展。
数字到字符串转换器
如果您应用需要打印财务文件,您可能非常喜欢这个
use Opilo\Farsi\NumberToStringConverter; print NumberToStringConverter::toString(21034510);
因为,这是输出结果: 二十一百万三千四百五十
以下是第二个注意事项 (第二个注意事项)
print ('نکتهی ' . NumberToStringConverter::toOrdinalString(2));
字符串清洁器
使用StringCleanser
类,您可以在与用户交互时处理波斯数字。StringCleanser::arabicToFarsi()
函数清除输入波斯字符串中的阿拉伯字符,这些字符通常出现在标准关键词中。
use Opilo\Farsi\StringCleaner; print(StringCleaner::digitsToFarsi('1394')); print("\n"); print(StringCleaner::digitsToEnglish('۱۳۹۴')); print("\n"); print(StringCleaner::arabicToFarsi('كيك پي اچ پي چيست؟')); print("\n");
这将(大约)输出
۱۳۹۴
1394
کیک پی اچ پی چیز خاصی نیست
Jalali Validator For Laravel 4.2 和 Laravel 5
安装
步骤 1:添加服务提供程序
将提供程序类添加到config/app.php文件中的提供程序数组中
'providers' => [ ... Opilo\Farsi\Laravel\FarsiServiceProvider::class, ]
步骤 2:定义错误信息
您需要在lang文件夹中的validation.php中定义jalali
、jalali_after
和jalali_before
规则的错误信息。此软件包sample-lang目录下提供了可复制粘贴的示例。例如,如果您的项目使用Laravel 5,并且您的波斯语翻译位于resources/lang/fa
目录下,请将这些行复制到resources/lang/fa/validation.php
'jalali' => ':attribute وارد شده تاریخ شمسی معتبری طبق فرمت :format نیست (مثال معتبر: :fa-sample).', 'jalali_after' => ':attribute وارد شده باید یک تاریخ شمسی معتبر بعد از :date باشد.', 'jalali_before' => ':attribute وارد شده باید یک تاریخ شمسی معتبر قبل از :date باشد.', ... //the rest of Farsi translations for validation rules. 'attributes' => [ 'birth_date' => 'تاریخ تولد', ... //the rest of Farsi translations for attributes ], ...
验证规则
jalali:Y/m/d
确定输入是否为指定格式的有效贾拉利日期。默认格式为Y/m/d
。
jalali_after:1380/1/1,Y/m/d
确定输入是否为指定格式的有效贾拉利日期,并且它晚于给定日期。默认格式为Y/m/d
,默认日期为今天。
jalali_before:1395-01-01,Y-m-d
判断输入的日期是否符合指定的贾拉利日期格式,并且是否在给定的日期之前。默认格式为 Y/m/d
,默认日期为今天。
jdatetime:"Y/m/d h:i:s"
判断输入的日期时间是否符合指定的贾拉利日期时间格式。默认格式为 Y/m/d h:i:s
。
jdatetime_after:"1380/1/1 12:00:00","Y/m/d h:i:s"
判断输入的日期时间是否符合指定的贾拉利日期时间格式,并且是否在给定的日期时间之后。默认格式为 Y/m/d h:i:s
,默认时间为现在。
jdatetime_before:"1395-01-01 h:i","Y-m-d h:i"
判断输入的日期时间是否符合指定的贾拉利日期时间格式,并且是否在给定的日期时间之前。默认格式为 Y/m/d h:i:s
,默认时间为现在。
示例
感谢 Laravel 5,您可以在您特定领域的请求对象的 rule() 函数中使用提到的验证规则。如果这不是一个选项,您可以使用这些规则,就像使用其他 Laravel 规则一样,代码如下
$v = Validator::make([ 'birth_date' => '1380/01/32', 'start_time' => '1395/02/16 12:10:00', ], [ 'birth_date' => 'required|jalali|jalali_before:1381/01/01|jalali_after:1300/01/01,Y/m/d', 'start_time' => 'required|jdatetime_after:"1395/01/01 00:00:00"|jdatetime_before:"1396/01/01 00:00:00"', ]); if ($v->fails()) { var_dump($v->messages()->toArray()); }
以上代码的输出将是
array(1) { ["birth_date"]=> array(3) { [0]=> string(140) "تاریخ تولد وارد شده تاریخ شمسی معتبری طبق فرمت Y/m/d نیست (مثال معتبر: ۱۳۹۴/۹/۱۳)." [1]=> string(113) "تاریخ تولد وارد شده باید یک تاریخ شمسی معتبر قبل از 1381/01/01 باشد." [2]=> string(113) "تاریخ تولد وارد شده باید یک تاریخ شمسی معتبر بعد از 1300/01/01 باشد." } }
许可证
Opilo Farsi 软件包是开源软件,根据 MIT 许可协议 许可。