diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryValidation/JQueryValidationScriptContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryValidation/JQueryValidationScriptContributor.cs index 7dd24fad23..cfe9f4867d 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryValidation/JQueryValidationScriptContributor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/JQueryValidation/JQueryValidationScriptContributor.cs @@ -15,6 +15,7 @@ public class JQueryValidationScriptContributor : BundleContributor public override void ConfigureBundle(BundleConfigurationContext context) { context.Files.AddIfNotContains("/libs/jquery-validation/jquery.validate.js"); + context.Files.AddIfNotContains("/libs/jquery-validation/abp.jquery.validate.js"); } public override void ConfigureDynamicResources(BundleConfigurationContext context) diff --git a/npm/packs/jquery-validation/abp.resourcemapping.js b/npm/packs/jquery-validation/abp.resourcemapping.js index 91575842d3..dc390b4326 100644 --- a/npm/packs/jquery-validation/abp.resourcemapping.js +++ b/npm/packs/jquery-validation/abp.resourcemapping.js @@ -1,6 +1,8 @@ module.exports = { mappings: { "@node_modules/jquery-validation/dist/jquery.validate.js": "@libs/jquery-validation/", - "@node_modules/jquery-validation/dist/localization/*.*": "@libs/jquery-validation/localization/" + "@node_modules/jquery-validation/dist/localization/*.*": "@libs/jquery-validation/localization/", + "@node_modules/@abp/jquery-validation/src/*.*": "@libs/jquery-validation/" + } } \ No newline at end of file diff --git a/npm/packs/jquery-validation/src/abp.jquery.validate.js b/npm/packs/jquery-validation/src/abp.jquery.validate.js new file mode 100644 index 0000000000..62b32d1d22 --- /dev/null +++ b/npm/packs/jquery-validation/src/abp.jquery.validate.js @@ -0,0 +1,27 @@ +$.validator.methods.range = function (value, element, param) { + if (this.optional(element)) { + return true; + } + + // Remove thousands separators and convert decimal separators + var cleanValue = value.replace(/[.,](?=.*[.,])/g, '').replace(/[.,](?!.*[.,])/g, '.'); + var numericValue = parseFloat(cleanValue); + + // Check if conversion was successful and value is within range + return !isNaN(numericValue) && (numericValue >= param[0] && numericValue <= param[1]); +}; + +$.validator.methods.number = function (value, element) { + if (this.optional(element)) { + return true; + } + + // 1. Period as decimal separator, comma as thousands separator (e.g., 1,234.56 or -1,234.56) + // 2. Comma as decimal separator, period as thousands separator (e.g., 1.234,56 or -1.234,56) + // 3. Pure numbers (integers) + var pattern1 = /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:-?\.\d+)?$/; + var pattern2 = /^(?:-?\d+|-?\d{1,3}(?:\.\d{3})+)?(?:-?,\d+)?$/; + var pattern3 = /^-?\d+$/; + + return pattern1.test(value) || pattern2.test(value) || pattern3.test(value); +}