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

时间:2018-11-14 13:04:33

标签: javascript regex

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

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

我能够实现大部分功能,但是我的RegEx模式也允许其他特殊字符。

我如何修改下面的RegEx模式,以允许除在字符串之间的下划线以外的任何特殊字符。

^[^0-9._]*[a-zA-Z0-9_]*[^0-9._]$

3 个答案:

答案 0 :(得分:2)

您的打开和关闭部分; [^0-9._],说匹配其他字符。

因此您需要将其更改为可以匹配的内容。

/^[A-Z][A-Z0-9_]*[A-Z]$/i

由于您现在说的是一个字符,所以有效:

/^[A-Z]([A-Z0-9_]*[A-Z])?$/i

答案 1 :(得分:1)

您可能要做的是使用negative lookaheads声明您的要求:

^(?![0-9._])(?!.*[0-9._]$)(?!.*\d_)(?!.*_\d)[a-zA-Z0-9_]+$

说明

  • ^断言字符串的开头
  • (?![0-9._])负向超前断言该字符串不是以[0-9._]开头
  • (?!.*[0-9._]$)否定超前断言该字符串不以[0-9._]结尾
  • (?!.*\d_)负向超前,断言该字符串不包含数字,后跟下划线
  • (?!.*_\d)的负向表示该字符串不包含下划线和数字的断言
  • [a-zA-Z0-9_]+匹配字符类中指定的内容一次或多次。您可以将要匹配的内容添加到字符类中,例如,还可以添加.
  • $声明字符串的结尾

Regex demo

答案 2 :(得分:1)

保持简单。只允许使用下划线和字母数字正则表达式:

/^[a-zA-Z0-9_]+$/

JavaScript es6实现(适用于React):

const re = /^[a-zA-Z0-9_]+$/;
re.test(variable_to_test);