我正在尝试使用jquery向字段添加验证
我尝试过
var pattern = /^[a-zA-Z\-]{3,}(\.(com|net))?$/;
var domain = 'abc.com';
if(pattern.test(domain)) {
// valid...
}
但这在“ -abc.com”上不起作用,因为它是正确的。
我想要 域名应为a-z或A-Z或0-9,并且连字符(-) &域名不得以连字符(-)开头或结尾 除此之外没有其他验证。
有什么想法吗? 谢谢
答案 0 :(得分:1)
您可以从\-
删除/^[a-zA-Z]{3,}(\.(com|net))?$/
演示
var pattern = /^[a-zA-Z][a-zA-Z\-].*/;
var domain = 'abc.com';
var falsedomain = "-abc.com";
var domain2 = "a-bc.com";
console.log(domain, pattern.test(domain))
console.log(domain2, pattern.test(domain2))
console.log(falsedomain, pattern.test(falsedomain))
答案 1 :(得分:1)
您的正则表达式失败的原因是^[a-zA-Z\-]{3,}
的意思
^
必须以-
{3,}
长3个或更多字符因此,如果它以-
开头且长度为3个字符,则表示匹配。
console.log(/^[a-zA-Z\-]{3,}/.test('abc-'))
console.log(/^[a-zA-Z\-]{3,}/.test('ab-c'))
console.log(/^[a-zA-Z\-]{3,}/.test('a-bc'))
console.log(/^[a-zA-Z\-]{3,}/.test('-abc'))
您可以创建一个更“复杂”的正则表达式以使其更好地匹配:^[a-zA-Z]{1,}[a-zA-Z\-]{2,}
^[a-zA-Z]{1,}
必须开始(^
)a→Z,1个或多个字符[a-zA-Z\-]{2,}
,a→Z或-
,2个或更多字符
console.log(/^[a-zA-Z]{1,}[a-zA-Z\-]{2,}/.test('abc-'))
console.log(/^[a-zA-Z]{1,}[a-zA-Z\-]{2,}/.test('ab-c'))
console.log(/^[a-zA-Z]{1,}[a-zA-Z\-]{2,}/.test('a-bc'))
console.log(/^[a-zA-Z]{1,}[a-zA-Z\-]{2,}/.test('-abc'))
PS:您可以通过简化输入范围或使正则表达式无关紧要,然后简化正则表达式组来简化自己的工作:
console.log(/^[a-z]{1,}[a-z\-]{2,}/i.test('abc'))
console.log(/^[a-z]{1,}[a-z\-]{2,}/i.test('ABC'))
console.log(/^[a-z]{1,}[a-z\-]{2,}/.test('abc'.toLowerCase()))
console.log(/^[a-z]{1,}[a-z\-]{2,}/.test('ABC'.toLowerCase()))