我的问题如下:
我有一个字段,你插入一个正则表达式,我必须检查它是否是有效的正则表达式(有效:[0-9],无效:[])。在我的页面上,我有一些其他字段包含验证规则,如[Required]或[StringLength],它们在客户端工作,但这个没有。
客户端验证javascript
function validateRegex() {
$.validator.addMethod("validateregex", function (value, element, params) {
var isValid = true;
if (value.length == 0) return true;
try {
var regex = new RegExp(value);
} catch (e) {
isValid = false;
}
console.log(isValid);
return isValid;
});
$.validator.unobtrusive.adapters.add("validateregex", [], function (options) {
options.rules["validateregex"] = true;
options.messages["validateregex"] = options.message;
});
}
在ASP.NET MVC属性中,我有这个:
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata,
ControllerContext context)
{
var rule = new ModelClientValidationRule
{
ErrorMessage = "RegEx is not valid", // FormatErrorMessage(metadata.DisplayName),
ValidationType = "validateregex"
};
rule.ValidationParameters.Add("errormessage", rule.ErrorMessage);
yield return rule;
}
和返回ValidationResult的IsValid方法,如果正则表达式正确/不正确。
<script type="text/javascript" src="~/Scripts/regexvalidator.js"></script>
<script type="text/javascript">
$(document).ready(function () {
validateRegex();
//$("#saveSettings").on("click", function () {
// $("#optionForm").submit();
//});
});
</script>
在我的.cshtml中,在$(document).ready中调用validateRegex函数。视野中的字段定义为:
<div class="form-group">
@Html.LabelFor(m => m.Regex, new { @class = "control-label" })
<div class="controls">
@Html.TextBoxFor(p => p.Regex, new { @class = "form-control", id = "regexField" })
@Html.ValidationMessageFor(p => p.Regex)
</div>
</div>
HTML查看源代码:
<div class="controls">
<input type="text" value="" name="Regex" id="regexField" class="form-control">
<span data-valmsg-replace="true" data-valmsg-for="Regex" class="field-validation-valid"></span>
</div>
除此之外,所有其他验证规则都有效。
任何人都知道为什么?
答案 0 :(得分:0)
变化:
<script type="text/javascript">
function validateRegex() {
$.validator.addMethod("validateregex", function (value, element, params) {
var isValid = true;
if (value.length == 0) return true;
try {
var regex = new RegExp(value);
} catch (e) {
isValid = false;
}
console.log(isValid);
return isValid;
});
$.validator.unobtrusive.adapters.add("validateregex", [], function (options) {
options.rules["validateregex"] = true;
options.messages["validateregex"] = options.message;
});
}
$(document).ready(function () {
validateRegex();
});
</script>
要:
<script type="text/javascript">
$.validator.addMethod("validateregex", function (value, element, params) {
var isValid = true;
if (value.length == 0) return true;
try {
var regex = new RegExp(value);
} catch (e) {
isValid = false;
}
console.log(isValid);
return isValid;
});
$.validator.unobtrusive.adapters.add("validateregex", [], function (options) {
options.rules["validateregex"] = options.params;
options.messages["validateregex"] = options.message;
});
</script>
将验证者注册在document.ready
或window.load
内会导致他们无法注册。