我想知道如何只需要字母和数字而不需要任何其他字符。因此字面意思[a-z]
和(\d
或[0-9]
)取决于为数字做出更好的方法。
所以如果我有一个需要验证的字符串:
$toValidate = 'Q23AS9D0APQQ2'; // It may start with letter or number, both cases possible.
然后如果我对它进行了验证:
return /([a-z].*[0-9])|([0-9].*[a-z])/i.test($toValidate);
我在这里使用了i
标志,因为它可能是用户输入小写或大写,它的用户偏好...所以正则表达式失败...它也接受特殊字符,所以这不是所希望的效果
通过上面的验证,这也会通过:
$toValidate = 'asdas12312...1231@asda___213-1';
然后我尝试了一些疯狂的事情,我甚至不知道我做了什么,所以如果有人能在正确的答案旁边告诉我,我会真的很感激。
return /([a-z].*\d)+$|(\d.*[a-z])+$/i.test($toValidate);
这似乎很有效。但是当我尝试继续在特殊字符后面输入字母或数字时,它仍然会被验证为true
。
示例:
$toValidate = 'q2IasK231@!@!#_+123';
所以请帮助我更好地理解regularExpressions
并告诉我在问题开始时验证字符串的方法是什么。字符串中预期的字母和数字。
答案 0 :(得分:4)
仅允许使用至少一个字母和至少一个数字的字母和数字:
/^(?=.*?\d)(?=.*?[a-zA-Z])[a-zA-Z\d]+$/
正则表达式细分:
^ # start of input
(?=.*?\d) # lookahead to make sure at least one digit is there
(?=.*?[a-zA-Z]) # lookahead to make sure at least one letter is there
[a-zA-Z\d]+ # regex to match 1 or more of digit or letters
$ # end of input
你不应该在你的正则表达式中使用.*
,否则它将允许输入中的任何字符。
答案 1 :(得分:1)
你在伪寻找的是: START-ANCOR [a-zA-Z0-9] 0-> Inf时间,([a-zA-Z] [0-9] OR [0-9] [a-zA-Z]),[a- zA-Z0-9] 0-> Inf时间END-ANCOR
用文字开头,从你的郎开始,用你的郎结尾,并在字母和数字之间包含一个接缝,或者反过来
应该是这样的:
/^([a-z0-9]* (([a-z][0-9]) | ([0-9][a-z])) [a-z0-9]*)$/i.
答案 2 :(得分:0)
您可以在括号内组合多种类型的字符。因此,以下正则表达式应该起作用:
/ ^([A-Z0-9] +)$ / I。
^和$匹配字符串的开头和结尾,因此将测试整个字符串的条件。 [a-z0-9]使其仅匹配字母和数字。 +使它匹配一个或多个字符。并且"我"最后,如你所知,使它不区分大小写。