简体   繁体   English

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

[英]Regex for only letters and numbers but no numbers at the beginning or end

I want to make a regex that matches only letters and numbers, but no numbers at the beginning or the end:我想制作一个只匹配字母和数字的正则表达式,但不匹配开头或结尾的数字:

  • ahmed0saber is valid ahmed0saber有效
  • 0ahmedsaber is not valid 0ahmedsaber无效
  • ahmedsaber0 is not valid ahmedsaber0无效
  • ahmed_saber is not valid ahmed_saber无效

I tried this我试过这个

[a-z0-9_]

but it doesn't work as expected!但它没有按预期工作!

This should work ^[az][az\d]*[az]$这应该有效^[az][az\d]*[az]$

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

If you also want to allow a single character:如果您还想允许单个字符:

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

Explanation解释

  • ^ Start of string ^字符串开始
  • [az] Match a single char az [az]匹配单个字符 az
  • (?![az\d]*\d$) Negative lookahead, assert the the string does not end on a digit (?![az\d]*\d$)否定先行,断言字符串不以数字结尾
  • [az\d]* Match optional chars az or digits [az\d]*匹配可选字符 az 或数字
  • $ End of string $字符串结束

See a regex demo .请参阅正则表达式演示

Or if a lookbehind assertion is supported:或者,如果支持后向断言:

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

Explanation解释

  • ^ Start of string ^字符串开始
  • [az] Match a single char az [az]匹配单个字符 az
  • [az\d]* Match optional chars az or digits [az\d]*匹配可选字符 az 或数字
  • $ End of string $字符串结束
  • (?<!\d) Negative lookabehind, assert not a digit at the end (?<!\d)负向后视,最后断言不是数字

See another regex demo .请参阅另一个正则表达式演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM