Jquery Validation REGEX 总是失败



Jquery 验证总是在正确正则表达式时失败,正则表达式检查框中的文本是否与以下格式匹配:YYYY-MM-DD. 尝试了我能找到的所有不同方法。使用 jquery-validation gem 和 javascript 文件可以像所有其他验证一样正确加载,但它总是失败日期。

Javascript文件:

$(document).on('turbolinks:load',function() {
$("#new_grand_prix").validate({
rules: {
"grand_prix[name]": {required: true},
"grand_prix[laps]": {required: true, min: 0, digits: true},
"grand_prix[country]": {required:true},
"grand_prix[date]": {required: true, correctDateForm: true},
}
});
jQuery.validator.addMethod("correctDateForm", function(value, element) {
var r = new RegExp('^d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])');
var test = r.test($('#grand_prix_date').html());
return test;
}, "Date must be in the following format: YYYY-MM-DD");
});

视图:

<script src="validate_new_grand_prix_form.js"></script>
<%= form_with(model: grand_prix, local: true, id: 'new_grand_prix') do |form| %>
<% if grand_prix.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(grand_prix.errors.count, "error") %> prohibited this grand_prix from being saved:</h2>
<ul>
<% grand_prix.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= form.label :name %>
<%= form.text_area :name %>
</div>
<div class="field">
<%= form.label :laps %>
<%= form.number_field :laps %>
</div>
<div class="field">
<%= form.label :country %>
<%= form.text_area :country %>
</div>
<div class="field">
<%= form.label :date %>
<%= form.text_area :date %>
</div>
<div class="actions">
<%= form.submit %>
</div>
<% end %>

看起来这段代码至少有 2 个问题:

1. 正则表达式

反斜杠转义字符串中的下一个字符。例如,'hello'输出'hello''\hello'输出'hello'。这在您的模式中变得有问题,因为它是作为字符串传递的。

所以,改变

var r = new RegExp('^d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])');

var r = new RegExp(/^d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])/);

2. 如何获取输入值

如果$('#grand_prix_date')是输入,请使用 val(( 而不是 html(( 来获取其内容。

所以,改变

var test = r.test($('#grand_prix_date').html());

var test = r.test($('#grand_prix_date').val());

请注意,您的正则表达式会将0000-02-31视为有效日期,但我认为该讨论超出了此问题的范围:)祝你好运!

最新更新