如何为带有a-z或A-Z或0-9和连字符(-)的字段添加验证?

时间:2020-09-09 10:45:51

标签: jquery

我正在尝试使用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,并且连字符(-) &域名不得以连字符(-)开头或结尾 除此之外没有其他验证。

有什么想法吗? 谢谢

2 个答案:

答案 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,}的意思

  • ^必须以
  • 开头
  • a→Z或-
  • {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()))