首页 > 解决方案 > 不接受单个下划线但接受单个字母的正则表达式

问题描述

该表达式不应接受除下划线和其中没有数字之外的任何特殊字符,并且它应该接受单个或多个字母。
例子

abc_dc(应该被接受)

_bsc(应该被接受)

A(应该接受)

_(不应接受)

a__b(不应被接受)

我试过了:

(^(?!.*?[_]{2})[^_][a-zA-Z_]+$)

但这不接受单个字母。

标签: regex

解决方案


您可以尝试以下模式:

^(?=.*[a-zA-Z])(?=[a-zA-Z_]+$)(?!.*_{2,}).+

图案说明:

通常,通过在模式的开头放置前瞻来实现多个验证,我使用了相同的策略。

解释:

^- 锚点 - 匹配字符串的开头

(?=.*[a-zA-Z])- 正向前瞻 - 断言当前位置后面是零个或多个任何字符 ( .*) 后跟字母字符。简单地说——断言下面的内容至少包含一个字母。

(?=[a-zA-Z_]+$)- 断言后面的内容仅包含字母或下划线,直到字符串结束(感谢$)。

(?!.*_{2,})- 否定前瞻 - 断言后面的内容不包含两个(或更多)以下下划线(感谢_{2,}

.+- 匹配一个或多个任意字符。

正则表达式演示


推荐阅读