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