我有一个特殊的要求,我需要实现以下目标
_
之外,不允许有特殊字符。_
、开头或结尾。
和数值。我能够实现大部分,但我的正则表达式模式也允许其他特殊字符。
我如何修改下面的正则表达式模式,以不允许任何特殊字符除了下划线在字符串之间。
<代码 > ^ [^ 0-9._]*[a-zA-Z0-9_] * [^ 0-9._] $< / 代码>
你可以做的是使用负面的lookahead来断言你的要求:
^(?![ 0-9。_])(?!. *[0-9。_]$)(?!.*\_)(?!.*_\d)[a-zA-Z0-9_]$
解释
^
断言字符串的开头(?![0-9._])
负前瞻,断言字符串不以[0-9._]
(?!. *[0-9._]$)
否定前瞻,断言字符串不以[0-9._]
(?!.*\d_)
否定前瞻断言字符串不包含后跟下划线的数字(?!.*_\d)
否定前瞻断言字符串不包含下划线后跟数字[a-zA-Z0-9_]
匹配字符类中指定的内容一次或多次。您可以将允许匹配的内容添加到字符类中,例如添加。
$
断言字符串的末尾正则表达式演示
保持简单。只允许下划线和字母数字正则表达式:
/^[a-zA-Z0-9_]+$/
Javascript es6实现(适用于React):
const re = /^[a-zA-Z0-9_]+$/;
re.test(variable_to_test);
您的开始和结束部分;[^0-9._]
,说匹配除这些之外的任何字符。
所以你需要把它改成你能匹配的。
/^[A-Z][A-Z0-9_]*[A-Z]$/i
既然你现在说一个字符是有效的:
/^[A-Z]([A-Z0-9_]*[A-Z])?$/i