本帖最后由 xbdragon0813 于 2011-09-22 13:58:35 编辑

解决方案 »

  1.   

    for($i=0;$i<strlen($str);$i++){  //对字符串每一位进行检查
      $test=ord(substr($str,$i,1));//取到当前字符的ASCII码值
      if(($test<0x2D))//允许  !~#¥&*()—+这些字符
      
      ($test>0x2D)&&($test<0x30)//允许 . 、这些字符
      
       ($test>0x39)&&($test<0x41)//允许 = < > ?等这些符号   ($test>0x5A)&&($test<0x5F) //允许[ ],^这些字符
       
       ($test>0x5F)&&($test<0x61)//允许 `这个字符(esc下面那个)
        
       ($test>0x7A)&&($test<0xa0)//允许{  }~和中文字符
       如果符合上述任何一种情况视为合法的。就把当前标志位置为1,继续判断下一个字符.否则置为0且跳出循环不用继续判断;
    当所有字符都是合法的情况下,视为字符串是合法的。感觉代码应该是if(($test<0x2D)||(($test>0x2D)&&($test<0x30))||(($test>0x39)&&($test<0x41))||(($test>0x5A)&&($test<0x5F))||(($test>0x5F)&&($test<0x61))||(($test>0x7A)&&($test<0xa0)))
       {
        $okflag = 1;
        continue;
       }
     else
      {
        $okflag = 0;
        break;
       }
        
      

  2.   

    [a-zA-Z\xa0-\xff_]小写大写英文,或者中文,或者下划线开头
    [0-9a-zA-Z\xa0-\xff_]后面的内容可以是小写大写中文数字下划线
    [0-9a-zA-Z\xa0-\xff_]{3,9}后面的内容重复3-9次所以整个正则表达式为[a-zA-Z\xa0-\xff_][0-9a-zA-Z\xa0-\xff_]{3,9}
    也可以加上开头结尾锚记^[a-zA-Z\xa0-\xff_][0-9a-zA-Z\xa0-\xff_]{3,9}$
      

  3.   

    for($i=0;$i<strlen($str);$i++){ //对字符串每一位进行检查
      $test=ord(substr($str,$i,1));//取到当前字符的ASCII码值
      if(($test<0x2D))//允许 !~#¥&*()—+这些字符
       
      ($test>0x2D)&&($test<0x30)//允许 . 、这些字符
       

    这段代码应该怎么用??????????