[英]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.