【问题标题】:Knockout Regex validation淘汰赛正则表达式验证
【发布时间】:2013-05-29 05:10:29
【问题描述】:

我正在使用 Knockout.validation 验证页面中的输入字段。起初,一切都很顺利,直到我尝试使用正则表达式。我真的不知道我做错了什么,希望你能帮助我。

下面是我的脚本:

var self = this;
self.MobileNumber = ko.observable().extend({ pattern: { params: "^(?:04\d{2}|\({1}04\d{2}\){1})\s{0,1}(\d{3}(\s{0,1})\d{3})$", message: "Invalid mobile number."} });

下面是我的 HTML 页面:

<div>
    <input data-bind="value: MobileNumber, valueUpdate: 'blur'" />
</div>
<div>
    <p data-bind="validationMessage: MobileNumber">
    </p>
</div>

【问题讨论】:

  • 好的,但是你的问题是什么?什么不工作?你确定你的正则表达式是正确的吗?你测试过它吗(用jsregex.com之类的东西)?

标签: knockout.js knockout-validation


【解决方案1】:

正则表达式需要声明为正则表达式而不是字符串,所以我会使用而不是上面的行

self.MobileNumber = ko.observable().extend({ 
    pattern: { 
        params: /^(?:04\d{2}|\({1}04\d{2}\){1})\s{0,1}(\d{3}(\s{0,1})\d{3})$/, 
        message: "Invalid mobile number."
    } 
});

在我自己的代码中,我习惯性地设置一个正则表达式模式对象,以便在我的应用程序中轻松重用...

var patterns = {
    email: /^([\d\w-\.]+@([\d\w-]+\.)+[\w]{2,4})?$/,
    phone: /^\d[\d -]*\d$/,
    postcode: /^([a-zA-Z]{1,2}[0-9][0-9]?[a-zA-Z\s]?\s*[0-9][a-zA-Z]{2,2})|(GIR 0AA)$/
};

那么我的 ko 看起来像......

self.postcode = ko.observable().extend({
     required: true,
     pattern: {
         message: 'Must be a valid UK postcode',
         params: patterns.postcode
     }
});

【讨论】:

  • 这不再是真的,现在可以是字符串或正则表达式
【解决方案2】:

请注意,如果您为pattern 提供对象,则必须包含message

正则表达式可以是字符串或正则表达式文字。

但是:如果您输入的是纯字符串,请不要忘记转义任何反斜杠 '^\\d{5}(?:[-\\s]\\d{4})?$' 而不是 '^\d{5}(?:[-\s]\d{4})?$'

self.postcode = ko.observable().extend({
     required: true,
     pattern: {
         message: 'Must be a valid UK postcode',
         params: patterns.postcode
     }
});

跟随不起作用,并导致奇怪的行为(我认为它实际上是试图匹配模式参数的toString() 值,这会产生非常奇怪的结果)。

self.postcode = ko.observable().extend({
     required: true,
     pattern: {
         params: patterns.postcode
     }
});

或者你可以直接提供模式

self.postcode = ko.observable().extend({
     required: true,
     pattern:  patterns.postcode
});

【讨论】:

    猜你喜欢
    • 2014-01-12
    • 2013-03-24
    • 2018-01-01
    • 2012-02-18
    • 2011-08-09
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 2017-01-27
    相关资源
    最近更新 更多