这个密码判断混合的正则是怎么写呀?

这个密码判断混合的正则是怎么写呀?

let pattern = /^[0-9]{6,20}|[a-zA-Z]{6,20}|[\S]{6,20}$/;
let pattern1 = /^([a-zA-Z]+[0-9]+){6,20}$/;//混合一个
let pattern2 = /^([a-zA-Z]+[0-9]+[\S]+){6,20}$/;//混合两个

这个括号分组好像不对但是要怎么限制他们的总数要到达到{6,20}呢。

就像let pattern1 = /^[a-zA-Z]+[0-9]{5,19}$/;    //混合一个

是只能保证字母有一个,数字后面跟的量词是数字的要怎么把量词給到整体呢?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
离离钟 2018-11-30 10:05:35

把单独数字的,字母的,符号的全部写出来,这样有三个正则了,再将两两组合的正则全部写出来,就又有3个正则了,再加上数组字母符号都满足的1个正则,总共加起来有7个正则,这样分开判断。我下面只写了5种情况。

id('password').onblur = function() {
		var patternNum = /^\d{6,20}$/;//数字正则
		var patternLetter = /^[a-z]{6,20}$/i;//字母正则
		var patternSymbol = /^[^\da-z\s]{6,20}$/i;//符号正则
		// 数字字母的正则,剩下两个字母符号,数字符号的正则我没写出来,意思是一样的
		var patternNumLetter =/^[\da-z]{6,20}$/i;
		// 数字字母符号的正则
		var patternNumLetterSymbol = /^\S{6,20}$/;

		if ( patternNum.exec( id('password').value )
		|| patternLetter.exec( id('password').value ) 
		|| patternSymbol.exec( id('password').value )) {
		         //这里的判断是只满足其中一个正则的
			id('passwordCue1').style.backgroundColor = "red";
			id('passwordCue2').style.backgroundColor = "#ccc";
			id('passwordCue3').style.backgroundColor = "#ccc";
			totalCue[1] = true;
		} else if ( patternNumLetter.exec( id('password').value ) ) {
		        //这里是满足两个的,剩下两个没写出来,可以自己写写看
			id('passwordCue1').style.backgroundColor = "red";
			totalCue[1] = true;
			id('passwordCue2').style.backgroundColor = "orange";
			id('passwordCue3').style.backgroundColor = "#ccc";
		} else if ( patternNumLetterSymbol.exec( id('password').value) ) {
		        这里是满足三个的
			id('passwordCue1').style.backgroundColor = "red";
			totalCue[1] = true;
			id('passwordCue2').style.backgroundColor = "orange";
			id('passwordCue3').style.backgroundColor = "green";
		} else {
		        //这里是都不满足的
			totalCue[1] = false;
			id('passwordCue1').style.backgroundColor = "#ccc";
			id('passwordCue2').style.backgroundColor = "#ccc";
			id('passwordCue3').style.backgroundColor = "#ccc";
		}
	}

仅供参考。

_是你_ 2018-11-20 11:18:52

我是这样写的:

开始先判断数量:

 var patt = /\S{6,20}/;

判断完数量之后判断内容:

一个

/^[1-9]{6,20}$/.test(value) || /^[a-zA-Z]{6,20}$/.test(value) || /^\W{6,20}$/.test(value)

两个

/^[1-9|a-z]{6,20}$/i.test(value)||/^[\W|a-z]{6,20}$/i.test(value)||/^[\W|1-9]{6,20}$/i.test(value)

三个

/\W[a-zA-Z]*/.test(value)

你可以试试。

  • 提问者 Horizn #1
    var pattern = /^[0-9]{6,20}|[a-zA-Z]{6,20}|[\W]{6,20}$/; pattern.test(value); 这样合并进一个正则可以吗?而且这个正则有问题吗?
    2018-11-20 16:27:57
  • 提问者 Horizn #2
    let pattern =/^[0-9]{6,20}$|^[a-zA-Z]{6,20}$|^[\W]{6,20}$/; let pattern1=/^[a-zA-Z|0-9]{6,20}$|^[a-zA-Z|\W]{6,20}$|^[0-9|\W]{6,20}$/; let pattern2=/^[a-zA-Z|0-9|\W]{6,20}$/; 然后判断我是用pattern.test(pwd.value)&&!pattern1.test(pwd.value)&&!pattern2.test(pwd.value)来判断第一个 pattern.test(pwd.value)&&pattern1.test(pwd.value)||pattern2.test(pwd.value)第二个 pattern.test(pwd.value)&&pattern1.test(pwd.value)&&pattern2.test(pwd.value)第三个。 感觉这样写正则老有问题。
    2018-11-20 16:53:55
_是你_ 2018-11-19 19:08:06

我是分着写的,先检测字符是否有{6,20}个,然后再检测内容强度,如果合在一起写太复杂了,你可以先分着写试试。

  • 提问者 Horizn #1
    。。跟我之前的想法一样,那我试试,
    2018-11-19 19:18:27
  • 提问者 Horizn #2
    let pattern = /^[0-9]{6,20}|[a-zA-Z]{6,20}|[\S]{6,20}$/; let pattern1=/[a-zA-Z]+[0-9]+/; let pattern2=/[a-zA-Z]+[0-9]+[\S]+/; //分开判断的正则是这样的吗?
    2018-11-19 19:42:42
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师