“无空格”的正则表达式验证

时间:2015-07-18 01:17:49

标签: javascript regex knockout.js

我试过了:

self.username = ko.observable(data.username || null)
    .extend({ required: true, maxLength: 50 })
    .extend({ pattern: { message: 'Username cannot contain spaces.', params: '^\S*$' } });

self.username = ko.observable(data.username || null)
    .extend({ required: true, maxLength: 50 })
    .extend({ pattern: { message: 'Username cannot contain spaces.', params: '[\S]' } });

但即使使用“a”的值,也会标记验证错误。

表达式'^\S*$'似乎适用于在线JavaScript正则表达式测试人员。 我不确定为什么会萎靡不振。

2 个答案:

答案 0 :(得分:4)

使用字符串定义正则表达式时,需要转义任何反斜杠,因此它应该是:

self.username = ko.observable(data.username || null)
   .extend({ required: true, maxLength: 50 })
   .extend({ pattern: { message: 'Username cannot contain spaces.', params: '^\\S*$' } });

如果使用正则表达式文字而不是字符串,则无需转义反斜杠:

self.username = ko.observable(data.username || null)
   .extend({ required: true, maxLength: 50 })
   .extend({ pattern: { message: 'Username cannot contain spaces.', params: /^\S*$/ } });

答案 1 :(得分:0)

我假设您正在使用ko.validation?

如果修复正则表达式不起作用,你可以尝试这样的事情(未经测试)......

ko.validation.rules['doesntContain'] = {
    validator: function (val, checkFor) {
        return val.indexOf(checkFor) === -1;
    },
    message: 'The field must not contain [{0}]'
};
ko.validation.registerExtenders();


var myCustomObj = ko.observable(data.username || null).extend({ doesntContain: " " });