Fix #19254: Support specifying custom characters for yii.validation.trim() and replace deprecated jQuery.trim()

This commit is contained in:
Anton
2022-03-30 23:46:08 +03:00
committed by GitHub
parent 4628b91e73
commit e08222bebd
2 changed files with 33 additions and 3 deletions

View File

@ -6,6 +6,7 @@ Yii Framework 2 Change Log
- Bug #19243: Handle `finfo_open` for tar.xz as `application/octet-stream` on PHP 8.1 (longthanhtran) - Bug #19243: Handle `finfo_open` for tar.xz as `application/octet-stream` on PHP 8.1 (longthanhtran)
- Bug #19235: Fix return type compatibility of `yii\web\SessionIterator` class methods for PHP 8.1 (virtual-designer) - Bug #19235: Fix return type compatibility of `yii\web\SessionIterator` class methods for PHP 8.1 (virtual-designer)
- Enh #19254: Support specifying custom characters for `yii.validation.trim()` and replace deprecated `jQuery.trim()` (WinterSilence)
- Bug #19291: Reset errors and validators in `yii\base\Model::__clone()` (WinterSilence) - Bug #19291: Reset errors and validators in `yii\base\Model::__clone()` (WinterSilence)
- Enh #19308: Add `yii\web\UploadedFile::$fullPath` represents 'full_path' key added in PHP 8.1 (WinterSilence) - Enh #19308: Add `yii\web\UploadedFile::$fullPath` represents 'full_path' key added in PHP 8.1 (WinterSilence)
- Bug #19303: Fix serialization in `yii\caching\Dependency::generateReusableHash()` (WinterSilence) - Bug #19303: Fix serialization in `yii\caching\Dependency::generateReusableHash()` (WinterSilence)

View File

@ -24,7 +24,7 @@ yii.validation = (function ($) {
var valid = false; var valid = false;
if (options.requiredValue === undefined) { if (options.requiredValue === undefined) {
var isString = typeof value == 'string' || value instanceof String; var isString = typeof value == 'string' || value instanceof String;
if (options.strict && value !== undefined || !options.strict && !pub.isEmpty(isString ? $.trim(value) : value)) { if (options.strict && value !== undefined || !options.strict && !pub.isEmpty(isString ? trimString(value) : value)) {
valid = true; valid = true;
} }
} else if (!options.strict && value == options.requiredValue || options.strict && value === options.requiredValue) { } else if (!options.strict && value == options.requiredValue || options.strict && value === options.requiredValue) {
@ -243,8 +243,17 @@ yii.validation = (function ($) {
} }
value = $input.val(); value = $input.val();
if (!options.skipOnEmpty || !pub.isEmpty(value)) { if (
value = $.trim(value); (!options.skipOnEmpty || !pub.isEmpty(value))
&& (!options.skipOnArray || !Array.isArray(value))
) {
if (Array.isArray(value)) {
for (var i = 0; i < value.length; i++) {
value[i] = trimString(value[i], options);
}
} else {
value = trimString(value, options);
}
$input.val(value); $input.val(value);
} }
@ -467,5 +476,25 @@ yii.validation = (function ($) {
} }
} }
/**
* PHP: `trim($path, ' /')`, JS: `yii.helpers.trim(path, {chars: ' /'})`
*/
function trimString(value, options = {skipOnEmpty: true, chars: null}) {
if (options.skipOnEmpty !== false && pub.isEmpty(value)) {
return value;
}
value = new String(value);
if (options.chars || !String.prototype.trim) {
var chars = !options.chars
? ' \\s\xA0'
: options.chars.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
return value.replace(new RegExp('^[' + chars + ']+|[' + chars + ']+$', 'g'), '');
}
return value.trim();
}
return pub; return pub;
})(jQuery); })(jQuery);