当正确的正则表达式时,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 %>
答案 0 :(得分:0)
该代码至少存在2个问题:
1。 RegExp
反斜杠转义字符串中的下一个字符。例如,'\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());
请注意,您的RegExp会将0000-02-31
视为有效日期,但是我认为该讨论超出了此问题的范围:)祝您好运!