JavaScript 正则表达式以验证特殊字符的单个出现

3

我需要使用javascript正则表达式验证一个字符串。这个字符串只能有一个不同的特殊字符。我尝试了以下模式。

/^[A-Za-z0-9]*[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]?[A-Za-z0-9]*$/

但它允许任何两个不同的特殊字符。但是根据我的情况,它应该只允许每个特殊字符单次出现(例如,“&”和“%”单次出现是可以接受的,但是“&”或其他任何字符的两个出现都是不允许的)。请帮忙。


这个正则表达式模式只允许一个特殊字符,可以查看 https://regex101.com/r/cH7pV7/1 - Wiktor Stribiżew
能否使用单个模式进行验证呢?从字符串中获取所有匹配的特殊字符并手动查找重复项将会很困难。即使我不确定这种方法,也还没有尝试过。 - VVK
2个回答

3
^(?!.*([!$%^&*()_+|~=`{}\[\]:";'<>?,.\/-]).*\1)[!$%^&*()_+|~=`{}\[\]:";'<>?,.\/A-Za-z0-9-]+$

尝试这个。这将允许“特殊字符”“0个或多个”,但不会有相同的特殊字符两次。请参见演示。 https://regex101.com/r/bW3aR1/5
var re = /^(?!.*([!$%^&*()_+|~=`{}\[\]:";'<>?,.\/-]).*\1)[!$%^&*()_+|~=`{}\[\]:";'<>?,.\/A-Za-z0-9-]+$/gm;
var str = 'abc12*$%\nabcd12324';
var m;

while ((m = re.exec(str)) != null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}

工作得非常好。非常感谢你的帮助。 - VVK

2

哎呀,这是错的

这不应该是这样的。你的正则表达式比较复杂,试着简化为这样:

/^[A-Za-z0-9]*[\W_]?[A-Za-z0-9]*$/

(\W 包括所有特殊字符,除了 _)

看看是否还不能工作。


哦,我误解了你的意思。 VKS 的答案是正确的。 - m0meni
感谢您的回复。但是这个结果与我的第一个模式相同,不允许字符串中有两个不同的特殊字符。请问能否提供一种验证我的情况的模式?字符串中可以有任何字符,但每个字符只能出现一次。 - VVK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接