我有一个特殊要求,我需要实现以下目标
_
外,不允许使用特殊字符。_
,.
和数字值开头或结尾。我能够实现大部分功能,但是我的RegEx模式也允许其他特殊字符。
我如何修改下面的RegEx模式,以允许除在字符串之间的下划线以外的任何特殊字符。
^[^0-9._]*[a-zA-Z0-9_]*[^0-9._]$
答案 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_]+
匹配字符类中指定的内容一次或多次。您可以将要匹配的内容添加到字符类中,例如,还可以添加.
$
声明字符串的结尾答案 2 :(得分:1)
保持简单。只允许使用下划线和字母数字正则表达式:
/^[a-zA-Z0-9_]+$/
JavaScript es6实现(适用于React):
const re = /^[a-zA-Z0-9_]+$/;
re.test(variable_to_test);