我有一个验证规则,如下所示:
loanAmount:{required:true,number:true,range:[20000,500000]},
我还想为loanAmount字段进行货币格式化。所以我使用了autoNumeric插件,如下所示:
$('#loanAmount').autoNumeric({dGroup:2});
但是,使用此方法,loanAmount的范围验证无法正常工作。 jquery不是获取loanAmount的原始值,而是获取格式化的值,因此无法验证。 例如,当我输入25000时,它变为25,000并传递给jquery并且验证不能按预期工作。
有解决方法吗?
如果有人可以提供帮助,我们会很高兴。
谢谢, SAURABH
答案 0 :(得分:0)
不幸的是,这是一个没有开箱即用解决方案的常规问题(我不知道)。
您可以做的是定义自己的验证方法,在执行检查之前首先“取消格式化”该值。您可以找到示例here。
提交表单时,传递的值是否格式化?在这种情况下,您可以通过正则表达式定义验证规则以检查特定格式而不是纯范围。
我认为这是一个值得向插件开发者提出建议的功能:一个可选的处理程序,在验证值之前将被调用,例如,可以将值取消格式化。
希望这有帮助,d。
答案 1 :(得分:0)
@Saurabh:我找到了解决方法。还有另一个插件可以很好地解决您遇到的问题。您只需在以下链接下载即可:
https://www.customd.com/articles/14/jquery-number-format-redux
文件也在那里......
希望它有所帮助。
答案 2 :(得分:0)
我今天遇到了同样的问题,这是我的工作方式,首先,我定义了新的自定义规则(为了钱):
$.validator.addMethod('moneyMinMax', function(value, element, params) {
return this.optional(element) || (priceToNumber(value) >= params[0] && priceToNumber(value) <= params[1])
}, 'Please submit a value between {0} € & {1} €');
然后:
$myForm.validate({
rules: {
field_integer_classic: {
required: true,
max: 22,
min: 2
},
field_money: {
required: true,
// call custom method added before with array [min, max]
moneyMinMax: [200, 6000],
},
我有一个简单的函数priceToNumber
,用于清理货币值周围的格式。如果需要,您可以使用AutoNumeric中的getNumericString()
。
类似的东西:
var value = AutoNumeric.getAutoNumericElement(element).getNumericString();
验证器方法中的。
答案 3 :(得分:0)
旧问题,但是如果有人发现此问题,则可以通过添加自定义验证来解决。您可以:
这里是一个示例,该示例如何为使用AutoNumeric的货币格式输入添加最小值的验证
# custom_validation.coffee
$.validator.addMethod 'moneyMin', (value, element, minValue) ->
anElement = AutoNumeric.getAutoNumericElement(element)
amount = Number(anElement.rawValue)
this.optional(element) || minValue < amount