Knockout正则表达式验证

Lem*_*tor 2 knockout.js knockout-validation

我正在使用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."} });
Run Code Online (Sandbox Code Playgroud)

以下是我的HTML页面:

<div>
    <input data-bind="value: MobileNumber, valueUpdate: 'blur'" />
</div>
<div>
    <p data-bind="validationMessage: MobileNumber">
    </p>
</div>
Run Code Online (Sandbox Code Playgroud)

Bri*_*owe 14

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

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."
    } 
});
Run Code Online (Sandbox Code Playgroud)

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

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)$/
};
Run Code Online (Sandbox Code Playgroud)

然后我的ko看起来像......

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