"无空格"的正则表达式验证

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]' } });

即使使用"a"的值,验证错误仍然被标记。

在在线JavaScript正则表达式测试器上,'^\S*$'表达式似乎可用。我不确定为什么会标记它。

2个回答

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*$/ } });

非常感谢您的详细解释,这个方法完美地解决了我的问题。 - Sir Crusher

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: " " });

为什么我要这样做而不是修复正则表达式?正则表达式有什么问题? - user663031
正则表达式没有问题。只是另一个选项,以防您想将其扩展到更多字符。 - Ray Suelzer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接