请教高手,这个怎么理解?
时间: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>";
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;
}
$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}$
[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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28