我正在使用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>
答案 0 :(得分: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."
}
});
在我自己的代码中,我习惯性地设置一个正则表达式模式的对象,以便在我的应用程序中轻松重用...
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
}
});
答案 1 :(得分:1)
请注意,如果您为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
});