此正则表达式要求字符串的末尾包含数字,但是也可以使用诸如“ aabbccd1bbb3bb”,“ vvvddhh3”,“ 12kkk”之类的字符串
(?=(?:.*[a-z]){1,24})(?:.*\d){0,22}
“要求”(例如“字符串应至少包含...”)被写为正则表达式语言中的起始超前断言,例如
^(?=.*[a-z])
读取“字符串的开头,后跟任何内容,再加上一个拉丁字母”。正则表达式的正文可以简单地为[a-z0-9]
,因为您可以接受字母和数字的任意顺序。
将它们放在一起,
re = /^(?=.*[a-z])[a-z0-9]+$/
test = [
'aaa','aaa33bb','2019','#*$)','',]
for (t of test)
console.log(t,re.test(t))
如果要限制整个字符串的长度,请用+
替换{1,nn}
。
您可以执行此操作而无需创建复杂的正则表达式模式。创建两个小模式以删除您不想检查的字符。例如,该片段包含一个正则表达式[^a-z]+
以匹配所有非小写字母的字符。然后,我们使用此模式从字符串中删除那些字符,然后我们可以计算剩余的字符数。这告诉我们aabbccd1bbb3bb
有12个字母字符。可以为数字\D+
创建相同的内容。然后,您可以在下面添加验证逻辑,以确保其满足其他约束条件(例如1
与复杂的正则表达式相比,这更易于理解,并且易于修改。
strings = [
"aabbccd1bbb3bb","vvvddhh3","12kkk","abcdefghijklmnopqrstuvwx12345678901234567890123",// too many digits
"abcdefghijklmnopqrstuvwxy1234567890123456789012",// too many alpha
"abcdefghijklmnopqrstuvwx1234567890123456789012" // just right
]
r1 = /[^a-z]+/g
r2 = /\D+/g
for (s of strings) {
a = d = s
n_alpha = a.replace(r1,'').length
n_digit = d.replace(r2,'').length
console.log(`alpha: ${n_alpha}; digit: ${n_digit}`)
// add your logic here
// e.g.
// if (n_alpha >= 1 && n_alpha <= 24) ...
}
另外,要检查字符串是否以数字结尾,只需对照\d$
进行检查。