显示不同用户输入的不同正则表达式消息

时间:2015-08-05 14:50:18

标签: javascript html regex asp.net-mvc

我有一个带有输入字段的MVC视图,该字段对正则表达式进行了验证,类似于 ^ XY [a-zA-Z0-9] {20} $

和我的Html字段看起来像

 @Html.TextBoxFor(t => t.Someclass.Name, new
                {
                    data_val = "true",
                    data_val_required = "Test Required Message",
                    data_val_regex = "Test Invalid Regex Message",
                    data_val_regex_pattern = "^XY[a-zA-Z0-9]{20}$",

                })

我有两个场景

  1. 当用户输入无效的XY12345678901235时,我们会显示" Test Required Message"

    1. 当用户输入123455时,这也是无效的,但我们应该输出不同的消息错误消息2
  2. 如何实现方案2?

    谢谢

1 个答案:

答案 0 :(得分:2)

您将无法使用不显眼的客户端验证(使用jquery.validate.js和jquery.validate.unobtrusive.js)来执行此操作,因为它只允许每个规则一条消息。相反,您可以通过编写自己的脚本来模拟行为,以类似的方式处理此问题。

有些人不清楚为什么在自动添加这些data-val-*属性时手动添加这些属性是您将[Required][RegularExpression]属性应用于您的媒体资源。首先将[Required]属性包含在您的媒体资源中,以便以默认方式处理

[Required(ErrorMessage = "...")]
public string Name { get; set; }

并在视图中

@Html.TextBoxFor(m => m.Someclass.Name)
@Html.ValidationMessageFor(m => m.Someclass.Name) // for the [Required] error message
<span id="regexerror" class="field-validation-error"></span> // for the custom message

并包含以下脚本来处理文本框.change()事件以测试值(如果适用,则显示相应的消息)和表单提交事件以取消提交(如果无效)。

var isValid = true;
var regex = /^XY[a-zA-Z0-9]{20}$/;
var prefix = 'XY';
var errorMessage = $('#regexerror');

$('#Someclass_Name').change(function() {
  var name = $(this).val();
  if (!name) { // no value so let client side validation handle it
    return;
  }
  // test if we match the regex
  isValid = regex.test(name);
  if (isValid) {
    errorMessage.text(''); // clear error
  } else {
    if (name.indexOf(prefix) == 0) {
      errorMessage.text('error message 1'); // starts with XY
    } else {
      errorMessage.text('error message 2')
    }
  }
});

$('form').submit(function() {
  return isValid; // will cancel the default submit if false
});

附注:您当然需要在服务器端重复此验证。客户端验证是一个很好的奖励,但可以被覆盖(永远不要信任用户输入)。