javascript 按位或(|),无符号右移(>>>)运算,组合技巧来实现————密码强度提示,四种情况??

直接上代码,原来的代码中,switch中的第一个case,判断之后,少加了个break 跳出判断语句,害得我查了半天,“怎么样式老是不对,不科学啊,呵呵,原来是没跳出case的判断了,还会执行后面的判断!!,哎,嘿嘿,不过后来还是发现了,开心中。。。”

原文地址:http://www.cnblogs.com/wybztn/archive/2009/11/18/1605285.html

这里还有个重要的设计技巧, 0001, 0010, 0100, 1000各代表一种情况的话,组合起来就有很多种情况,我们怎么来表示,或者说怎么来存储这n多种组合的情况呢,就用到了一个技巧,1.先按位或存储到一个变量a中, 2.再将 a & 1, 并无符号右移>>> ,直到为0 为止(停止)。

直接上代码

<html>
<head>
    <meta http-equiv="content-type" content="text/html charset=utf-8"/>
    <title>Javascript评估用户输入密码的强度</title>
      <script language="JavaScript">
      //CharMode函数
    //测试某个字符是属于哪一类.
    function CharMode(iN){
        if (iN>=48 && iN <=57) //数字
           return 1;
        if (iN>=65 && iN <=90) //大写字母
            return 2;
        if (iN>=97 && iN <=122) //小写
            return 4;
        else
        return 8; //特殊字符
        }

    //bitTotal函数
    //计算出当前密码当中一共有多少种模式
    function bitTotal(num){
        modes=0;
        for (i=0;i<4;i++){
            if (num & 1) modes++;
            num>>>=1;
            }
        return modes;
        }

    //checkStrong函数
    //返回密码的强度级别

    function checkStrong(sPW){
        if (sPW.length<=4)
            return 0; //密码太短
        Modes=0;
        for (i=0;i<sPW.length;i++){
            //测试每一个字符的类别并统计一共有多少种模式.
            Modes |=CharMode(sPW.charCodeAt(i));
            }

        return bitTotal(Modes);

        }

    //pwStrength函数
    //当用户放开键盘或密码输入框失去焦点时,根据不同的级别显示不同的颜色

    function pwStrength(pwd){
        O_color="#eeeeee";
        L_color="#FF0000";
        M_color="#FF9900";
        H_color="#33CC00";
        if (pwd==null||pwd==‘‘){
            Lcolor=Mcolor=Hcolor=O_color;
            }
        else{
            S_level=checkStrong(pwd);
            switch(S_level) {
                case 0:
                    Lcolor=Mcolor=Hcolor=O_color;
                    break;
                case 1:
                    Lcolor=L_color;
                    Mcolor=Hcolor=O_color;
                    break;
                case 2:
                    Lcolor=Mcolor=M_color;
                    Hcolor=O_color;
                    break;
                default:
                    Lcolor=Mcolor=Hcolor=H_color;
            }
        }

        document.getElementById("strength_L").style.background=Lcolor;
        document.getElementById("strength_M").style.background=Mcolor;
        document.getElementById("strength_H").style.background=Hcolor;
        return;
    }

        </script>
      </head>
<body>
<form name=form1 action="" >
    输入密码:<input type=password size=10 onKeyUp=pwStrength(this.value) onBlur=pwStrength(this.value)>
    <br>密码强度:
    <table width="217" border="1" cellspacing="0" cellpadding="1" bordercolor="#cccccc" height="23" style=‘display:inline‘>
    <tr align="center" bgcolor="#eeeeee">

    <td width="33%" id="strength_L">弱</td>

    <td width="33%" id="strength_M">中</td>

    <td width="33%" id="strength_H">强</td>
    </tr>
    </table>

    </form>

</body>

  

时间: 2024-12-15 23:26:05

javascript 按位或(|),无符号右移(>>>)运算,组合技巧来实现————密码强度提示,四种情况??的相关文章

java移位运算符:&lt;&lt;(左移)、&gt;&gt;(带符号右移)和&gt;&gt;&gt;(无符号右移)。

1. 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数. 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规则只记住一点:丢弃最高位,0补最低位 如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模.如对int型移动33位,实际上只移动了332=1位. 2)运算规则 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零. 当左移的运算数是int 类型时,每移动1位它的第31位就

java中的无符号移位运算

1. 无符号右移   >>>  或 >>> = 无符号右移(>>>)跟右移(>>)运算符不一样. 右移不改变数的正负. 对于一个正数,无符号右移不会变成负数(相当于除以1再取整):但是对于一个负数,无符号右移会将负数变成正数: int i = -4; System.out.printf("%-10d %32s\n", i, Integer.toBinaryString(i)); i >>>= 1;  /

JavaScript中无符号右移赋值操作

无符号右移赋值操作 (>>>=)是对变量值根据表达式值所规定的位数进行无符号右移,并将结果赋给该变量.示例代码: result >>>= expression 其中参数是result任何变量. expression是任何表达式. JavaScript中无符号右移赋值操作说明 使用 >>>= 运算符和使用下面的语句是等效的:health.hljmlyfcyy.com result = result >>> expression >

原码,反码,补码 与(&amp;) 或(|) 非(~) 异或(^) 左移 &lt;&lt; 右移 &gt;&gt; 无符号右移 &gt;&gt;&gt;

原码 数字在计算机中以二进制表示,8位的字长,最高位是符号位, 正数为0,负数为1.比如,3为0000 0011: -3为1000 0011. 注意,Java中int为32位.3的16进制表示为3,-3的16进制为fffffffd. 反码 正数的反码和原码相同. 负数的反码为符合位不变,其余按位取反. 3 为0000 0011: -3为1111 1100. 补码 正数的补码和原码相同. 负数的补码为反码+1. 3 为0000 0011: -3为1111 1101 与(&) 按位与,位数对齐,全部

PHP无符号右移与旋转右移

# PHP 无符号右移 仅用于int形, PHP 的int为32位 # // 右移旋转 function rightRoate($int,$n){ $min = intval(PHP_INT_MAX + 1); $max = PHP_INT_MAX; for ($i=0; $i < $n; $i++) { // 进行右移 if($int & 1){ $num = $min; $int >>=1; $int |= $num; }else{ $num = $max; $int >

与 或 亦或 取反 右移 无符号右移

// 提取低位的半个字节  System.out.println("01010101 & 0x00ff 结果为"+(0x55 & 0x0f));  // 按位或   // 在socket通信DataInputStream.readUnsignedShort()中用来合并byte  System.out.println("00001111 | 11110000 结果为:"+(15 | 15 << 4));  // 按位亦或  System.

java 左移&lt;&lt;&amp;&gt;&gt;右移&amp;&gt;&gt;无符号右移

java中右移运算符>>和无符号右移运算符>>>的区别 在做一个pcm音频时遇到了这个符,但是我看有些百度的地方的解释都不能令我很懂,所以就整理下. 首先左移和右移的区别是很好区分的 左移<< :就是该数对应二进制码整体左移,左边超出的部分舍弃,右边补零.举个例子:253的二进制码1111 1101,在经过运算253<<2后得到1111 0100.很简单 右移>> :该数对应的二进制码整体右移,左边的用原有标志位补充,右边超出的部分舍弃.

java的&lt;&lt;左移,&gt;&gt;右移,&gt;&gt;&gt;无符号右移

>>右移 右移,道在二进制中,假设用一个32位的Int表示一个64,那么高位就都是0,所以当我们把整个二进制数右移,如0100000 >> 2 = 0001000,可以看到右移两位后的数变成了8,可以分析出其实右移就是一个除以2的操作 例:对于非2,4,8,16,64的数也可以试验一下: System.out.println(3 >> 1); System.out.println(5 >> 1); System.out.println(63 >>

Java负整数的左移、右移、无符号右移

转自  Java负整数的左移.右移.无符号右移 Java负整数的左移.右移.无符号右移.正数的位移没有涉及到符号,而且正数的原码.反码.补码都是一样的,所以相对简单,但是对于负整数的位移,往往容易混淆. Java的<<  >>   >>> 都是针对补码来进行的,因为Java只存储补码. 例如对整数-3进行<<  >> >>>运算做说明. 整数-3的二进制 原码为 10000000 00000000 00000000 000