إنها مكتبة PHP لجلب الحقول والتحقق من صحتها وتخزين الرسائل في حاويات مختلفة (بما في ذلك الخطأ والتحذير والمعلومات والنجاح) حسب الظروف.
الأيديولوجية وراء هذه المكتبة بسيطة: 3 فئات، وتبعيات بسيطة وتعمل في PHP 7.1 والإصدارات الأحدث، لذلك يمكن تشغيلها عمليًا في أي مشروع PHP، بما في ذلك WordPress، وLaravel، ومشروع PHP الأساسي، وما إلى ذلك.
أمثلة
نموذج البرنامج التعليمي والجدول مع PHP
إنه مثال على الوظيفة. المثال النموذجي أكثر تعقيدًا، حتى لو كان مجرد بضعة أسطر من التعليمات البرمجية.
لنفترض أننا نريد التحقق من صحة قيمة قيمة إدخال (get) تسمى "id"، يمكننا القيام بالأشياء التالية:
use eftec ValidationOne ;
$ val = new ValidationOne ();
$ r = $ val -> def ( ' ERROR ' )
-> type ( ' integer ' )
-> ifMissingThenDefault ()
-> condition ( " eq " , " It's not equals to 10 " , 10 )
-> condition ( " eq " , " It's not equals to 30 (info) " , 30 , ' info ' )
-> ifFailThenDefault ()
-> get ( ' id ' ); // <-- end of the chain
ولكن أين الخطأ؟. يتم تخزين الرسائل في messageList
var_dump ( $ val -> messageList -> allArray ()); // here we show all messages of any kind of type.
var_dump ( $ val -> messageList -> errorCount ); // returns the number of errors.
var_dump ( $ val -> errorcount ()); // returns the number of errors (alternative)
var_dump ( $ val -> hasError ()); // returns true if there is an error.
ومع ذلك، يمكننا أيضًا عرض الرسالة حسب النوع (خطأ، تحذير..) والرسالة فقط بواسطة معرف محدد.
var_dump ( $ val -> messageList -> get ( ' id ' )-> allErrorOrWarning ()); // All error or warning contained in the key "id".
لماذا يتم تخزين الرسائل في بعض الهياكل؟ أليس من السهل إرجاع الخطأ ببساطة؟
الجواب هو النموذج. لنفترض أن لدينا نموذجًا به ثلاثة حقول. إذا فشل أحدهما، فيجب أن يكون الخطأ مرئيًا لكل حقل على حدة. كما يمكن أن يكون للنموذج بأكمله رسالته الخاصة.
عادة ما تكون بداية السلسلة مكتوبة في نهاية الكود.
الطرق المسموح بها هي:
مثال:
$ val = new ValidationOne ();
$ id = $ val -> type ( ' integer ' )-> get ( ' id ' );
$ id = $ val -> type ( ' integer ' )-> post ( ' id ' );
$ id = $ val -> type ( ' integer ' )-> request ( ' id ' );
$ id = $ val -> type ( ' integer ' )-> set ( ' 123 ' , ' id ' );
$ val = new ValidationOne ();
$ id = $ val -> type ( ' integer ' )-> get ( ' id ' ); // $_GET['id']
$ val = new ValidationOne ( ' frm ' ); // we set a prefix for every reading.
$ id = $ val -> type ( ' integer ' )-> get ( ' id ' ); // $_GET['frm_id']
الشرط ($ condition، $message = ""، $ conditionValue = null، $level = 'error'، $key = null)
ويضيف شرطًا يعتمد على نوع الإدخال.
@param سلسلة الحالة $
الرقم : req,eq,ne,gt,lt,gte,lte,بين,خالي,notnull
سلسلة :req،eq،ne،minlen،maxlen،betweenlen،null،notnull،contain،notcontain،alpha،alphanum،text،regexp،email،url،domain
التاريخ : req,eq,ne,gt,lt,gte,lte,بين
سلسلة البيانات :req,eq,ne,gt,lt,gte,lte,between
منطقية : req، مكافئ، ني، صحيح، خطأ
الملف : minsize، maxsize، req، صورة، وثيقة، ضغط، هندسة معمارية، تحويلة
وظيفة:
fn.static.Class.methodstatic
fn.global.function
fn.object.Class.method حيث الكائن هو كائن $ عمومي
fn.class.Class.method
fn.class.namespaceClass.method
@param سلسلة الرسالة $
يمكن أن تستخدم الرسالة المتغيرات التالية '%field'،'%realfield'،'%value'،'%comp'،'%first'،'%sec'
مجال | وصف | مثال |
---|---|---|
٪مجال | اسم الحقل، يمكن أن يكون اسم الصديق أو الاسم الفعلي | معرف العميل |
المجال الحقيقي | اسم الحقل (وليس معرف الصديق ) | معرف العميل |
٪قيمة | القيمة الحالية للمجال | جون |
%comp | القيمة للمقارنة (إن وجدت) | |
٪أولاً | القيمة الأولى للمقارنة (إذا كانت قيمة المقارنة عبارة عن مصفوفة) | |
٪ثانية | القيمة الثانية للمقارنة (إذا كانت قيمة المقارنة عبارة عن مصفوفة) | |
٪مفتاح | المفتاح المستخدم (لصفيف الإدخال) |
@param null $conditionValue
param سلسلة $level (خطأ، تحذير، معلومات، نجاح). مستوى الخطأ. راجع messageContainer لمزيد من المعلومات
@param string $key إذا لم يكن المفتاح فارغًا، فسيتم استخدامه لإضافة أكثر من شرط لكل مفتاح
@return ValidationOne
ملاحظة: إذا كانت القيمة فارغة وكانت قيمة isNullValid() صحيحة، فسيتم تجاهل الشروط. إذا كانت القيمة مفقودة وكانت قيمة isMissingValid() صحيحة، فسيتم تجاهل الشروط. إذا كانت القيمة فارغة ('') وكانت قيمة isEmptyValid() صحيحة، فسيتم تجاهل الشروط. إذا كانت القيمة فارغة ('') أو خالية وكانت قيمة isNullOrEmptyValid() صحيحة، فسيتم تجاهل الشروط. تعتبر isNullValid() وisMissingValid() وisNullOrEmptyValid() وisEmptyValid() مفيدة عندما نريد التحقق من صحة القيمة فقط إذا كانت موجودة أو إذا تم تعيين القيمة.
مثال:
$ validation -> def ( null )
-> type ( ' integer ' )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 50 )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 60 )
-> set ( ' aaa ' , ' variable2 ' );
يكتب | وصف |
---|---|
عدد صحيح | (رقمي) يسمح برقم بدون علامة عشرية |
com.unixtime | (رقمي) يسمح برقم بدون علامة عشرية |
منطقية | (منطقي) يخزن الصواب أو الخطأ. يمكن أن يختلف الإدخال (فارغ، صفر أو لاغ = خطأ، وإلا يكون صحيحًا) |
عشري | (رقمي) يسمح برقم عشري |
يطفو | (رقمي) يسمح برقم عشري |
varchar | (سلسلة) يسمح بأي إدخال |
خيط | (سلسلة) يسمح بأي إدخال |
تاريخ | (التاريخ) يمكن أن يكون الإدخال DateTime أو سلسلة. يتم تخزين القيمة ككائن DateTime |
التاريخ والوقت | (التاريخ) يمكن أن يكون الإدخال DateTime أو سلسلة. يتم تخزين القيمة ككائن DateTime |
datestring | (التاريخ) يمكن أن يكون الإدخال DateTime أو سلسلة. يتم تخزين القيمة كسلسلة |
datetimestring | (التاريخ) يمكن أن يكون الإدخال DateTime أو سلسلة. يتم تخزين القيمة كسلسلة |
ملف | (ملف) الإدخال عبارة عن سلسلة، ويتم تخزينه كسلسلة، ولكنه يضيف تحققًا خاصًا |
نوع الإدخال | حالة | |
---|---|---|
رقم | جي تي، لتر، جي تي إي، LTE، بين | |
خيط | مينلين، ماكسلين، بينلين، تحتوي على ، لا يحتوي على ألفا، أبجدية، نص، regexp، بريد إلكتروني، عنوان url، المجال | |
تاريخ | جي تي، لتر، جي تي إي، LTE، بين | |
datestring | جي تي، لتر، جي تي إي، LTE، بين | |
منطقية | صحيح، خطأ | |
ملف | الحد الأدنى، الحد الأقصى، الطلب، الصورة، الوثيقة، الضغط، الهندسة المعمارية، تحويلة | |
* (ينطبق على أي نوع) | req,eq,ne,null,notnull,فارغ,notempty | |
* | وظيفة | |
* | fn.static.Class.methodstatic | |
* | fn.global.function | |
* | fn.object.Class.method حيث الكائن هو كائن $ عمومي | |
* | fn.class.Class.method | |
* | fn.class.namespaceClass.method |
حالة | وصف | مثال القيمة |
---|---|---|
بنيان | يجب أن يكون امتداد الملف عبارة عن ملف معماري (dwg، وما إلى ذلك) | |
بين | يجب أن يكون الرقم بين قيمتين | [0,20] |
بينلين | يجب أن يكون طول النص بين قيمتين | [0,20] |
ضغط | يجب أن يكون امتداد الملف ملف ضغط | |
يحتوي | يجب أن يحتوي النص على قيمة | "نص" |
وثيقة | يجب أن يكون امتداد الملف ملف مستند | |
مكافئ (يمكن أن يكون مصفوفة أو قيمة) / == | يجب أن تكون القيمة مساوية ل يجب أن تكون القيمة موجودة في صفيف | "نص"،["نص"،"نص2"] |
يخرج | يجب أن يكون الملف أو القيمة موجودة (يمكن أن تكون فارغة/فارغة) | |
مفقود / غير موجود | يجب ألا يكون الملف أو القيمة موجودًا أو أن يكون خاليًا/فارغًا | |
مطلوب (أو مطلوب) | يجب ألا تكون القيمة فارغة أو فارغة | |
تحويلة | يجب أن يكون الامتداد (الملف) موجودًا في قائمة الامتدادات | ["ext1"، "ext2"، "ext3"] |
خطأ شنيع | يجب أن تكون القيمة خاطئة (===خطأ) | |
fn.class.namespaceClass.method | يجب أن ترجع طريقة الفصل صحيحًا | |
fn.class.Class.method | يجب أن ترجع طريقة الفصل صحيحًا | |
fn.global.function | يجب أن ترجع الدالة العالمية صحيحًا | |
fn.object.Class.method حيث الكائن هو كائن $ عمومي | يجب أن تُرجع طريقة الكائن العام صحيحًا | |
fn.static.Class.methodstatic | يجب أن تُرجع الطريقة الثابتة للفئة صحيحًا | |
وظيفة | يجب أن ترجع الدالة صحيحًا | |
جي تي /> | يجب أن تكون القيمة أكبر من | 123 |
جي تي إي / >= | يجب أن تكون القيمة أكبر أو تساوي | 123 |
صورة | يجب أن يكون امتداد الملف ملف صورة | |
لتر / < | يجب أن تكون القيمة أقل من | 123 |
LTE / <= | يجب أن تكون القيمة أقل أو تساوي | 123 |
maxlen | الحد الأقصى لطول السلسلة | 123 |
com.maxsize | الحد الأقصى لحجم الملف | 123 |
مينلين | الحد الأدنى لطول السلسلة | 123 |
حجم صغير | الحد الأدنى لحجم الملف | 123 |
mime (القيمة المراد مقارنتها يمكن أن تكون سلسلة أو مصفوفة) | نوع mime للملف | "application/msword" أو ["application/msword"، "image/gif"] |
mimetype | نوع mime (بدون نوع فرعي) للملف | "تطبيق" أو ["تطبيق،"صورة"] |
ne / != (القيمة المراد مقارنتها يمكن أن تكون قيمة واحدة أو مصفوفة) | يجب ألا تكون القيمة متساوية. أو يجب ألا تكون القيمة موجودة في مصفوفة | 123،[123،345]،["aa"،"bb"] |
لا تحتوي على | يجب ألا تحتوي القيمة على قيمة | "نص" |
notnull | يجب ألا تكون القيمة فارغة | |
باطل | يجب أن تكون القيمة فارغة | |
فارغ | يجب أن تكون القيمة فارغة (أي ""،0،خالية) | |
غير فارغ | يجب ألا تكون القيمة فارغة (أي لا تساوي ""،0،خالية) | |
مطلوب | يجب أن تكون القيمة موجودة | |
حقيقي | يجب أن تكون القيمة صحيحة (===صحيحة) |
أمثلة:
$ validation -> def ( null )
-> type ( ' integer ' )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 50 )
-> condition ( ' between ' , ' %field %value must be between 1 and 50 ' ,[ 1 , 50 ])
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 60 )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' ,[ 60 , 200 ]) // eq allows a single or array
-> condition ( ' fn.static.Example.customval ' , ' the function does not work ' )
-> condition ( ' req ' )
-> condition ( ' lt ' , " es muy grande " , 2000 , ' warning ' )
-> condition ( ' eq ' , ' %field %value is not equal to %comp ' , 50 )
-> condition ( ' fn.static.Example.fnstatic ' , ' the static function does not work ' )
-> condition ( ' fn.static.somespaceSomeclass.methodStatic ' , null )
-> condition ( ' fn.global.customval ' , ' The global function does not work ' )
-> condition ( ' fn.object.example.fnnostatic ' , ' the function object does not work ' )
-> condition ( ' fn.class.somespaceSomeclass.method ' , ' The function some class does not work ' )
-> condition ( ' fn.class.Example.fnnostatic ' , ' la funcion class no funciona ' );
// ->condition('fn.static.Example.customval','la funcion no funciona')
function customval ( $ value , $ compareValue ) {
return true ;
}
في بعض الأحيان نحتاج إلى استخدام شرط مخصص. يمكننا إنشاء متغير عام، أو دالة ثابتة، أو حتى طريقة داخل الفصل.
يجب أن تحتوي كل طريقة أو وظيفة يتم إنشاؤها على معلمتين (بأي اسم):
على سبيل المثال، ماذا لو كنا بحاجة إلى تقييم ما إذا كان بعض المعرفات غير موجود في قاعدة البيانات؟
$ validation -> condition ( ' fn.global.idExist ' , ' The id already exist! ' )-> get ( " id " );
function idExist ( $ id , $ compare = null ) {
// select count(*) c from table where id=$id
if ( $ c > 0 ) {
return true ;
} else {
return false ;
}
}
ملاحظة: إذا أردنا تحديد مساحة اسم، فيمكننا استخدام الترميز: namespaceSomeClass
$ validation -> condition ( ' fn.global.customfn ' ); // global
$ validation -> condition ( ' fn.static.SomeClass.staticfn ' ); // calling a static method inside the class SomeClass.
$ validation -> condition ( ' fn.class.SomeClass.noStaticFn ' ); // method inside a class,it creates an instance of an object then it calls the method
$ validation -> condition ( ' fn.object.myObject.noStaticFn ' ); // method inside a class, it uses an instance called $myObject
// global function
function customfn ( $ value , $ compareValue ) {
// returns true or false
}
// static function
$ myObject = new SomeClass ();
class SomeClass {
public static function staticfn ( $ value , $ compareValue ) {
// returns true or false
}
public function noStaticFn ( $ value , $ compareValue ) {
// returns true or false
}
}
عندما نقوم بالتحقق من صحة كائن ما، يمكنه تخزين المعلومات داخل حاوية الرسائل (وتسمى أيضًا قائمة الرسائل).
يحتوي messageContainer (EFTEC/MessageContainer) على قائمة رسائل بطريقة هرمية:
Container (usually only 1 for all the project)
Lockers (from zero to many)
Messages (from zero to many and grouped by level)
$ container -> get ( ' locker20 ' )-> firstError (); // it returns the first message of error in the locker20 that is part of the container.
يتم تسوية الرسائل على النحو التالي
بطاقة تعريف | وصف | مثال |
---|---|---|
خطأ | الرسالة خطأ ويجب حلها. إنها سدادة العرض لدينا. | قاعدة البيانات معطلة |
تحذير | الرسالة عبارة عن تحذير بأنه ربما يمكن تجاهلها. ومع ذلك، تسمح فئة messageContainer بتجميع الخطأ والتحذير على أنهما نفس الشيء. | تم تخزين التسجيل ولكن مع التحذيرات |
معلومات | الرسالة عبارة عن معلومات. على سبيل المثال، لتسجيل عملية أو تصحيحها. | يتم تخزين السجل |
نجاح | الرسالة عبارة عن عملية ناجحة | تم قبول الطلب |
وظيفة | وصف | مثال |
---|---|---|
addMessage($idLocker, $message, $level = 'خطأ') | ويضيف رسالة داخل الخزانة. عادةً ما يتم ذلك تلقائيًا بواسطة المكتبة ولكن يمكنك إضافة الرسائل يدويًا عبر الكود. | $this->addMessage('pwd','كلمة المرور مطلوبة','خطأ'); |
getMessage($withWarning = false) | يحصل على رسالة الخطأ الأولى أو يكون فارغًا في حالة عدم وجوده | $this->getMessage(); |
getMessages($withWarning = false) | فإنه يحصل على كافة رسائل الخطأ أو فارغة إذا لم يكن هناك | $this->getMessages(); |
getMessageId($idLocker) | يحصل على كائن messageLocker (راجع EFTEC/MessageContainer لمزيد من المعلومات) | $obj=$this->getMessageId('pwd'); |
errorCount(includeWarning=false) | فإنه يحصل على عدد الأخطاء | $count=$this->errorCount(); |
hasError($includeWarning=false) | وترجع صحيحا إذا كان هناك خطأ | $fail=$this->hasError(); |
مجال | وصف | مثال |
---|---|---|
$messageList | يحصل على كل الحاوية. تقوم بإرجاع كائن من النوع messageContainer | $container=$this->messageList; |
يمكنك الاطلاع على مزيد من المعلومات حول messageContainer في EFTEC/MessageContainer
مثال:
$ validation -> addMessage ( ' idlocker ' , ' this field is required ' , ' error ' ); // it adds a message inside a locker.
$ validation -> messageList -> get ( ' idlocker ' )-> allError (); // it gets all errors from the locker idlocker
$ validation -> getMessages ( true ); // it gets all messages of error or warning from all the lockers.
يمكننا أيضًا العمل مع التواريخ. هناك عدة أنواع من تنسيقات التاريخ.
يكتب | وصف |
---|---|
تاريخ | (التاريخ) يمكن أن يكون الإدخال DateTime أو سلسلة. يتم تخزين القيمة ككائن DateTime |
التاريخ والوقت | (التاريخ) يمكن أن يكون الإدخال DateTime أو سلسلة. يتم تخزين القيمة ككائن DateTime |
datestring | (التاريخ) يمكن أن يكون الإدخال DateTime أو سلسلة. يتم تخزين القيمة كسلسلة باستخدام الحقل $dateOutputString |
datetimestring | (التاريخ) يمكن أن يكون الإدخال DateTime أو سلسلة. يتم تخزين القيمة كسلسلة باستخدام الحقل $dateLongOutputString |
هناك طريقتان لتحديد تنسيق التواريخ، قصيرة (التاريخ فقط) وطويلة (التاريخ والوقت). ويمكننا تحديد التنسيق كمدخل ومخرج.
حقل الاسم | وصف | القيمة الافتراضية |
---|---|---|
$dateShort | هو تنسيق الإدخال (المتوقع) للتاريخ (قصير) | د / م / ص |
$dateLong | هو تنسيق الإدخال (المتوقع) (مع التاريخ والوقت) | د/م/YH:i:s |
$dateOutputString | إنه تنسيق الإخراج (لسلسلة التاريخ) | YMD |
$dateLongOutputString | إنه تنسيق الإخراج (لسلسلة التاريخ) | YmdTH:i:sZ |
$ r = getVal ()-> type ( ' datestring ' )-> set ( ' 31-12-2019 ' ); // 2019-12-31 note: the default input value is d/m/Y, not m/d/Y
يمكننا تغيير تنسيق التاريخ عن طريق تغيير الحقول أو استدعاء الوظائف التالية
ضبط تنسيق التواريخ (إدخال قصير، إدخال طويل، إخراج قصير، إخراج طويل)
$ validation -> setDateFormat ( ' m/d/Y ' , ' m/d/Y H:i:s ' , ' Y-m-d ' , ' Y-m-dTH:i:sZ ' )
قمنا بتعيين تنسيق التواريخ على التكوين الافتراضي
$ validation -> setDateFormatDefault ();
قمنا بتعيين التنسيق على التواريخ إلى:
اسم | شكل |
---|---|
الإدخال قصير | م/د/ص |
الإدخال طويل | م/د/YH:i:s |
الإخراج قصير | YMD |
الإخراج طويل | YmdTH:i:sZ |
$ validation -> setDateFormatEnglish ()
بشكل افتراضي، لا تقوم هذه المكتبة بإنشاء استثناءات. ومع ذلك، من الممكن إنشاء استثناءات إذا كانت الرسالة من النوع خطأ و/أو تحذير.
باستخدام هذه الطريقة، إذا قامت الحاوية بإنشاء خطأ، فسيتم أيضًا إنشاء استثناء جديد.
ملاحظة: بشكل افتراضي، تكون معظم الرسائل من النوع خطأ.
ملحوظة: عند رمي العامل، لا يتم تعيين القيمة ويتم حذف المكدس، أي إذا قمنا برمي استثناء، فسيتم فقدان جميع المعلومات.
try {
$ validation -> type ( ' integer ' )
-> throwOnError () // for errors only
-> set ( ' hello ' , ' field1 ' );
// or you could use:
$ validation -> type ( ' integer ' )
-> throwOnError ( true , true ) // for errors and warnings
-> set ( ' hello ' , ' field1 ' );
$ this -> fail ( ' this value means the throw failed ' );
} catch ( Exception $ ex ) {
$ this -> assertEquals ( ' field1 is not numeric ' , $ ex -> getMessage ());
}
هناك أربع طرق مختلفة للتعامل مع القيم الفارغة في هذه المكتبة.
$ validation -> exist ()-> set ( null ); // is valid.
$ validation -> exist ()-> set ( '' ); // is valid.
$ validation -> exist ()-> get ( ' field ' ); // is valid only if $_GET['field'] exist (even if it is null)
$ validation -> required ()-> set ( null ); // is not valid.
$ validation -> required ()-> set ( "" ); // is not valid.
$ validation -> required ()-> set ( ' hi ' ); // is valid.
$ validation -> notnull ()-> set ( null ); // is not valid.
$ validation -> notnull ()-> set ( "" ); // is valid.
$ validation -> notnull ()-> set ( ' hi ' ); // is valid.
$ validation -> notempty ()-> set ( null ); // is valid.
$ validation -> notempty ()-> set ( "" ); // is not valid.
$ validation -> notempty ()-> set ( ' hi ' ); // is valid.
أيضًا، هناك 4 طرق لقبول القيم المفقودة، الفارغة أو الفارغة، لتجاوز أي شرط.
$ validation -> isNullValid ()-> condition (... . )-> set ( null ); // is valid no matter the condition.
$ validation -> isNullorEmptyValid ()-> condition (... . )-> set ( null ); // is valid no matter the condition.
$ validation -> isEmptyValid ()-> condition (... . )-> set ( '' ); // is valid no matter the condition.
$ validation -> isMissingValid ()-> condition (... . )-> get ( ' field ' ); // If the field is missing, then is valid no matter the condition
يتم استخدامه عندما نحتاج إلى التحقق من صحة عندما يكون للمدخل قيمة ما ما لم تكن القيمة مفقودة أو فارغة أو فارغة.
isNullorEmptyValid() يساوي الاتصال: isEmptyValid()->isNullValid()
أيضًا، يمكن تكديس هؤلاء المشغلين.
$ validation
-> isNullorEmptyValid ()
-> isMissingValid ()
-> condition (... . )
-> set (... . ); // this expression is valid if the value is null, empty(''), the value is missing, no matter the conditions.
يمكننا تعيين قيمة افتراضية. يمكن أن تكون هذه القيمة احتياطية عند وجود خطأ. لا يتم تحويل القيمة الافتراضية أو معالجتها أبدًا.
$ validation
-> def (- 1 )
-> type ( ' integer ' )
-> ifFailThenDefault ()
-> set (...); // if the operation fails, then it returns -1
تقليم النتيجة. بشكل افتراضي، لا يتم اقتطاع النتيجة. يمكنك تقليم الجانب الأيسر أو الأيمن أو كلا الجانبين. ويستخدم الأسلوب تحويل () للقيام بهذه العملية.
$ validation -> trim ()-> set (... . ); // trim both sided
$ validation -> trim ( ' trim ' , ' ., ' )-> set (... . ); // trim . and ,
$ validation -> trim ( ' ltrim ' )-> set (... . ); // trim left sided
$ validation -> trim ( ' rtrim ' )-> set (... . ); // trim right sided
في بعض الأحيان، نريد دائمًا تقليم النتائج. لذلك يمكننا استخدام هذه الطريقة لتقليص النتيجة دائمًا. يتم تكديسه في نهاية التحويل.