【问题标题】:Javascript returning a string as a regex for jquery validate add methodJavascript返回一个字符串作为jquery validate add方法的正则表达式
【发布时间】:2018-12-19 08:15:54
【问题描述】:

我在下面有这个带有特定正则表达式的 jquery validate add 方法。

我想要的是创建一个返回正则表达式的方法,就像在我的第二个示例中一样,但第二个示例不起作用。我收到一些错误提示“对象不支持属性或方法“测试”

if (scope.countryCode == "DE") {
  $.validator.addMethod('PostalCodeError',
    function(value) {
      return /^(?!01000|99999)(0[1-9]\d{3}|[1-9]\d{4})$/.test(value);
    }, 'Please enter a valid German postal code.');

  $("#PostalCode").rules("add", {
    PostalCodeError: true
  });
}

我想要下面这样的东西

$.validator.addMethod('PostalCodeError',
  function(value) {
    return GetCountryRegex().test(value);
  }, 'Please enter a valid postal code.');

$("#PostalCode").rules("add", {
  PostalCodeError: true
});


function GetCountryRegex() {
  if (scope.countryCode == "DE") {
    return '/^(?!01000|99999)(0[1-9]\d{3}|[1-9]\d{4})$/';
  }
  if (scope.countryCode == "AT") {
    return '/^\\d{4}$/';
  }
}

【问题讨论】:

  • 请注意 /regexp/'/regexp/' 是两个不同的东西(第二个是字符串)。试试return new RegExp('regexp');
  • 我删除了代码片段。如果您不包含正确的 HTML/CSS/JavaScript/插件来制作现场演示,它们将完全没有意义。

标签: javascript jquery regex jquery-validate


【解决方案1】:

所以,在 GetCountryRegex 中,您实际上并没有返回 RegEx,而是您返回的字符串。

在返回值上使用new RegExp将字符串转换为RegExp:

function GetCountryRegex() {
  if (scope.countryCode == "DE") {
    return '/^(?!01000|99999)(0[1-9]\d{3}|[1-9]\d{4})$/';
  }
  if (scope.countryCode == "AT") {
    return '/^\\d{4}$/';
  }
}

var regExp = new RegExp(GetCountryRegex());
regExp.test(...);

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2015-10-04
    • 2018-11-09
    • 1970-01-01
    • 2018-07-23
    相关资源
    最近更新 更多