我正在使用正则表达式来验证域名(我的问题不是确定正则表达式是否好!)。
这是我正在使用的正则表达式: ^(?:[a-zA-Z0-9]+(?:-*[a-zA-Z0-9])*.)+[a-zA-Z]{2 ,6}$
在我的 C# 后端使用这个正则表达式,域名 org.comabcd 被标记为无效(因为域名扩展中有 7 个字符)。所以这很棒!
在在线 javascript 正则表达式验证器 ( http://regexpal.com/ ) 中使用此正则表达式,我发现了相同的行为。这个还是很棒的!!
但是,我的 UI 前端在自定义 DataAnnotationsModelValidator 上的 Knockout JS 自定义验证中使用此正则表达式,并且域名被标记为有效。
这是我正在使用的代码:
ko.validation.rules["domainname"] = {
validator: (val: any, validate: boolean) => {
var regex = new RegExp("^(?:[a-zA-Z0-9]+(?:\-*[a-zA-Z0-9])*\.)+[a-zA-Z]{2,6}$");
return regex.test(val);
},
message: Localization.validation_domain_name_invalid_format
};
我知道验证器“有点”工作,因为当尝试在域名扩展中包含数字时,它被正确地标记为无效。
知道发生了什么,为什么正则表达式似乎没有正确使用?