+ -
当前位置:首页 → 问答吧 → 请教高手,这个怎么理解?

请教高手,这个怎么理解?

时间:2011-09-22

来源:互联网

今天在网上看到一个例子,关于注册用户名的,还是有点不太明白,请高手给讲解一下怎么用?



function isLegalName($str){ 
  //一个接一个地检查,是否它是在A-Za-z_0-9-及汉字的编码范围内。是的话$okeyflag=1.
  for($i=0;$i<strlen($str);$i++){  
  $test=ord(substr($str,$i,1));
  //$test=dechex($test);
  if(($test<0x2D)||(($test>0x2D)&&($test<0x30))||(($test>0x39)&&($test<0x41))||(($test>0x5A)&&($test<0x5F))||(($test>0x5F)&&($test<0x61))||(($test>0x7A)&&($test<0xa0))): 
  $OkeyFlag=1; 
  break; 
  else: 
  $OkeyFlag=0; 
  endif; 
  } 
   
  if(!$OkeyFlag): 
  return 1; 
  else: 
  return 0; 
  endif; 


if ((!$username) || ($username=="")||(!isLegalName($username))) $stop = "<center>LEGAL NAME</center><br>";

作者: xbdragon0813   发布时间: 2011-09-22

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;
  }
 

作者: ohmygirl   发布时间: 2011-09-22

[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}$

作者: xbdragon0813   发布时间: 2011-09-22

相关阅读 更多