我试图弄清楚如何只需要字母和数字而不需要任何其他字符。所以字面上[a-z]和(\d或[0-9])取决于什么是更好的数字方式。
因此,如果我有一个需要验证的字符串:
$toValidate = 'Q23AS9D0APQQ2'; // It may start with letter or number, both cases possible.
Run Code Online (Sandbox Code Playgroud)
然后,如果我对此进行了验证:
return /([a-z].*[0-9])|([0-9].*[a-z])/i.test($toValidate);
Run Code Online (Sandbox Code Playgroud)
我i在这里使用了一个标志,因为它可能是用户输入的小写或大写,这是用户偏好......所以正则表达式失败......它也接受特殊字符,所以这不是预期的效果。
通过上面的验证,这也通过了:
$toValidate = 'asdas12312...1231@asda___213-1';
Run Code Online (Sandbox Code Playgroud)
然后我尝试了一些疯狂的事情,我什至不知道我做了什么,所以如果有人能告诉我正确答案,我会非常感激。
return /([a-z].*\d)+$|(\d.*[a-z])+$/i.test($toValidate);
Run Code Online (Sandbox Code Playgroud)
这似乎工作得很好。但是当我尝试在特殊字符后继续输入字母或数字时,它仍然验证为true.
例子:
$toValidate = 'q2IasK231@!@!#_+123';
Run Code Online (Sandbox Code Playgroud)
所以请帮助我regularExpressions更好地理解并告诉我在我的问题开头验证字符串的方法是什么。字符串中需要的字母和数字。
要仅允许包含至少一个字母和至少一位数字的字母和数字,请使用:
/^(?=.*?\d)(?=.*?[a-zA-Z])[a-zA-Z\d]+$/
Run Code Online (Sandbox Code Playgroud)
正则表达式细分:
^ # 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
Run Code Online (Sandbox Code Playgroud)
你不应该.*在你的正则表达式中使用,否则它会允许输入中的任何字符。
| 归档时间: |
|
| 查看次数: |
1961 次 |
| 最近记录: |