【问题标题】:Javascript Regex to validate single occurrence of special charactersJavascript正则表达式验证特殊字符的单次出现
【发布时间】:2015-08-04 22:55:23
【问题描述】:

我有一个字符串要使用 javascript 正则表达式进行验证。该字符串可以单次出现任何不同的特殊字符。我尝试了以下模式。

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

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

【问题讨论】:

  • 这个正则表达式模式只允许一个特殊字符,看看regex101.com/r/cH7pV7/1
  • 是否可以使用单一模式对其进行验证。很难从字符串中获取所有匹配的特殊字符并手动查找重复项。即使我不确定这种方法,我还没有尝试过。

标签: javascript regex


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

试试这个。这将允许special characters 0 or more 但不会有相同的`特殊字符两次。参见演示。

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.
}

【讨论】:

  • 工作得很好。非常感谢您的帮助。
【解决方案2】:

哎呀,这是错误的

不应该是这样的。你有一些相当复杂的东西,所以尝试将你的正则表达式简化为:

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

\W 包括除_ 之外的所有这些特殊字符)

看看还是不行

【讨论】:

  • 哦,我误解了你的意思。 VKS 有正确的答案。
  • 感谢您的回复。但这给出了与我的第一个模式相同的结果,并且不允许字符串中有两个不同的特殊字符。你能建议我一个模式来验证我的场景吗?字符串中的任何字符,但只出现一次。
猜你喜欢
  • 2011-12-10
  • 1970-01-01
  • 2012-08-18
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 2022-10-22
  • 1970-01-01
  • 2012-06-06
相关资源
最近更新 更多