仅用于字母和数字,但开头和结尾没有数字的正则表达式



我想创建一个只匹配字母和数字的正则表达式,但开头和结尾都没有数字:

  • ahmed0saber有效
  • 0ahmedsaber无效
  • ahmedsaber0isnot valid
  • ahmed_saber无效

我试过了

[a-z0-9_]

但是它没有像预期的那样工作!

这应该可以工作^[a-z][a-zd]*[a-z]$

const regex = /^[a-z][a-zd]*[a-z]$/
const tests = ['ahmed0saber', '0ahmedsaber', 'ahmedsaber0', 'ahmed_saber']
tests.forEach(test)
function test(name) {
console.log(name, name.match(regex) ? 'yes' : 'no')
}

如果您还想允许使用单个字符:

^[a-z](?![a-zd]*d$)[a-zd]*$

  • ^起始字符串
  • [a-z]匹配单个字符a-z
  • (?![a-zd]*d$)负向前看,断言字符串不以数字结束
  • [a-zd]*匹配可选字符a-z或数字
  • $字符串结束

查看正则表达式演示。

或者如果支持向后看断言:

^[a-z][a-zd]*$(?<!d)

  • ^起始字符串
  • [a-z]匹配单个字符a-z
  • [a-zd]*匹配可选字符a-z或数字
  • $字符串结束
  • (?<!d)负向后看,断言末尾不是数字

查看另一个正则表达式演示。

最新更新