如何编写符合特定字符规则且支持1至任意长度的正则表达式
修改后的正则表达式
针对你的需求,这里是调整后的正则:
const emailAcctName = /^[a-zA-Z0-9_-](?:[a-zA-Z0-9._-]*[a-zA-Z0-9_-])?$/;
规则说明
^[a-zA-Z0-9_-]:强制字符串开头为拉丁字母、数字、下划线或减号,直接排除点作为首字符,同时满足单个字符不能是点的要求(?:[a-zA-Z0-9._-]*[a-zA-Z0-9_-])?:这部分是可选的,用于处理长度大于1的字符串:[a-zA-Z0-9._-]*:允许中间出现任意数量的合法字符(包括点)[a-zA-Z0-9_-]:确保字符串结尾是非点字符?标记让这部分可以不存在,这样就支持单个合法字符的匹配
$:匹配字符串结束位置,避免多余字符
测试验证
- 符合要求的匹配项:
"x","user_name","my-email.123","a.b.c" - 不符合要求的排除项:
".","..abc","abc..",".start","end."
原正则用了三个+限定符,导致必须至少3个字符才能匹配;调整后通过可选的非捕获组,完美支持1个及以上长度的合法字符串。
内容的提问来源于stack exchange,提问作者Kustom
相关产品推荐
相关产品推荐

