我将根据以下条件进行验证:
- 它将允许所有特殊字符
- 它必须包含至少 1 个字母或字母数字
- 只有特殊字符不起作用
我用了
/^\d*[a-zA-Z][a-zA-Z0-9]+/
它适用于所有场景,但在输入特殊字符之前确实需要 2 个字符或数字或两个字符的组合。
例子:
a!!@#$*()_
失败但应该通过a1!@#$*()_
通行证
请帮助更正正则表达式。
我将根据以下条件进行验证:
我用了
/^\d*[a-zA-Z][a-zA-Z0-9]+/
它适用于所有场景,但在输入特殊字符之前确实需要 2 个字符或数字或两个字符的组合。
例子:
a!!@#$*()_
失败但应该通过
a1!@#$*()_
通行证
请帮助更正正则表达式。
tl;dnr 答案:
/^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/
解释:
在正则表达式中表达“AND”条件的常用方法如下:
/
^
(?= pattern 1)
(?= pattern 2)
(?= pattern 3)
etc
/
^
基本上,只有当其余部分与所有给定模式匹配时,我们才接受输入 ( ) 的开始。否则,整个表达式将失败。
在您的示例中,模式 1 是匹配所有内容,包括“特殊字符”。根据您的评论,您正在寻找可打印的 ASCII 范围。一个 ASCII 字符是[!-~]
,因为我们不想要任何其他东西(比如“国际字符”)并且不允许空字符串,最终模式是:
[!-~]+$
第二种模式是“至少一个字母数字”,可以改写为“任何数量的其他任何东西,然后是一个数字或字母”,即
.*[A-Za-z0-9]
把它们放在一起:
/^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/
一些测试:
re = /^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/
console.log(re.test("hi")) // true
console.log(re.test("a!!@#$*()_")) // true
console.log(re.test("~!!@#$*()_")) // false
console.log(re.test("π+1")) // false
console.log(re.test("")) // false
似乎工作!
您的正则表达式需要一个字母字符后跟一个字母数字字符。显然,第一个示例不符合该条件,而第二个示例则通过了。
你的条件也有很大的重叠。说它必须包含“至少一个字母或字母数字字符”与简单地说它必须包含“至少一个字母数字字符”是一样的。这个条件也排除了说字符串不能都是特殊字符的需要;虽然在那里,你可能只是在澄清。您需要的正则表达式非常简单:
/[a-zA-Z0-9]/.test(str)
它在任何地方搜索str
字母数字字符。
/[a-zA-Z0-9]/
你的正则表达式:
/[a-zA-Z0-9]/.test(string)
[编辑] 这实际上与@acheong87 的答案相同......