提问者:小点点

RegEx模式不允许除下划线之外的特殊字符


我有一个特殊的要求,我需要实现以下目标

  1. 除了字符串之间的_之外,不允许有特殊字符。
  2. 字符串不应以_开头或结尾。和数值。
  3. 不应在任何数值之前或之后允许下划线。

我能够实现大部分,但我的正则表达式模式也允许其他特殊字符。

我如何修改下面的正则表达式模式,以不允许任何特殊字符除了下划线在字符串之间。

<代码 > ^ [^ 0-9._]*[a-zA-Z0-9_] * [^ 0-9._] $< / 代码>


共3个答案

匿名用户

你可以做的是使用负面的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