如何限制注册的用户名只能用英文、数字、中文,不能用别的?

时间:2022-09-04 12:59:25
在用户注册时,有什么方法可以检查用户提交的用户名,如果此用户名包含有英文、中文、数字之外的字符就提示,而且不能继续注册的。例如,提交的注册名为清の茶,中间一个就能被识别为非法字符。而且,数字不能在开头,例如:1清の茶也不合法。
如何做,请教各位。我不清楚中、英、数字的编码范围。

14 个解决方案

#1


if Instr(request("name"),"=")>0 or Instr(request("name"),"%")>0 or Instr(request("name"),chr(32))>0 or Instr(request("name"),"?")>0 or Instr(request("name"),"&")>0 or Instr(request("name"),";")>0 or Instr(request("name"),",")>0 or Instr(request("name"),"'")>0 or Instr(request("name"),",")>0 or Instr(request("name"),chr(34))>0 or Instr(request("name"),chr(9))>0 or Instr(request("name"),"")>0 or Instr(request("name"),"$")>0 .........then

response.write "<br>"+"<li>name含有非法字符。"
        response.write ("<script>history.go(-1)</script>")
response.end
end if

#2


用正则表达式

#3


楼上的朋友的代码是用来验证诸如“!@#$%^”这样的字符的,思路是一个个的比较,可是还有些键盘上打不出的字符和日本平假名、片假名等等很多很多,不可能一个个的去比较,我的思路是:汉字和英文、数字都有对应的ASCII码,知到了各自的范围,检查用户名是否在这个范围内就可以了。

#4


function isName(strName)
{
return (strName.search(/^\w{1,20}$|^[^\x09^\x21-\x2f^\x3a-\x3f^\x5b-\x60^\x7b-\x7e]{1,20}$/)!=-1);
}

#5


日文片假名:23074(a A)-23094(z Z)有范围
数字:23119(0)-23121(9)有范围
逗号是23636  .........没范围

还有好多,而且逗号分号等也没有规律,安你这样判断是不是代价也太大了?

#6


可是,新浪的注册就做到了只能用中文、英文和数字。
楼上是想根据编码检查如果有在不合法范围内判断为合法,这样很复杂,如果反过来想想,只取三个范围:汉字、英文、数字。如果不在此三个范围内判断为非法 的话就没有那么复杂了。

#7


为什么没人回答了呢? 自己顶

#8


我觉得应该用正则表达式。

#9


用正则表达式不是很好嘛

#10


<input type="text" name="uesrid" onblur="Check(this.value)"/>
<script>
function Check(str)
{
    var reg = /^[\u4E00-\u9FA5|a-zA-Z][\u4E00-\u9FA5|0-9a-zA-Z]*$/
    var r = reg.test(str);
    if(r==false){alert("用户名只能用英文、数字、中文,不能用别的,数字不能在开头")}
}
</script>

#11



楼上的代码 /^[\u4E00-\u9FA5|a-zA-Z][\u4E00-\u9FA5|0-9a-zA-Z]*$/  是什么意思?看不懂

#12


to  wanghr100(灰豆宝宝.net)
老兄真高手也,经常看到你贴些有分量的内容,不过,你给的这个函数里我没看出来如何做到检查数字是不是在开头的。

#13


最好2边都检测。。。。。

输入的时候用正值表达式检查
提交后再检查次,防止外部提交

#14


有的. 

 var reg = /^[\u4E00-\u9FA5|a-zA-Z][\u4E00-\u9FA5|0-9a-zA-Z]*$/

^[\u4E00-\u9FA5|a-zA-Z]  开头只能用 中文或英文.

[\u4E00-\u9FA5|0-9a-zA-Z]* 紧接着就是可以中文英文,还有数字.


附:

Microsoft Windows脚本技术
http://vip.5d.cn/friday/upload/SCRIPT56.chm 
//有正则资料,语法介绍.

#1


if Instr(request("name"),"=")>0 or Instr(request("name"),"%")>0 or Instr(request("name"),chr(32))>0 or Instr(request("name"),"?")>0 or Instr(request("name"),"&")>0 or Instr(request("name"),";")>0 or Instr(request("name"),",")>0 or Instr(request("name"),"'")>0 or Instr(request("name"),",")>0 or Instr(request("name"),chr(34))>0 or Instr(request("name"),chr(9))>0 or Instr(request("name"),"")>0 or Instr(request("name"),"$")>0 .........then

response.write "<br>"+"<li>name含有非法字符。"
        response.write ("<script>history.go(-1)</script>")
response.end
end if

#2


用正则表达式

#3


楼上的朋友的代码是用来验证诸如“!@#$%^”这样的字符的,思路是一个个的比较,可是还有些键盘上打不出的字符和日本平假名、片假名等等很多很多,不可能一个个的去比较,我的思路是:汉字和英文、数字都有对应的ASCII码,知到了各自的范围,检查用户名是否在这个范围内就可以了。

#4


function isName(strName)
{
return (strName.search(/^\w{1,20}$|^[^\x09^\x21-\x2f^\x3a-\x3f^\x5b-\x60^\x7b-\x7e]{1,20}$/)!=-1);
}

#5


日文片假名:23074(a A)-23094(z Z)有范围
数字:23119(0)-23121(9)有范围
逗号是23636  .........没范围

还有好多,而且逗号分号等也没有规律,安你这样判断是不是代价也太大了?

#6


可是,新浪的注册就做到了只能用中文、英文和数字。
楼上是想根据编码检查如果有在不合法范围内判断为合法,这样很复杂,如果反过来想想,只取三个范围:汉字、英文、数字。如果不在此三个范围内判断为非法 的话就没有那么复杂了。

#7


为什么没人回答了呢? 自己顶

#8


我觉得应该用正则表达式。

#9


用正则表达式不是很好嘛

#10


<input type="text" name="uesrid" onblur="Check(this.value)"/>
<script>
function Check(str)
{
    var reg = /^[\u4E00-\u9FA5|a-zA-Z][\u4E00-\u9FA5|0-9a-zA-Z]*$/
    var r = reg.test(str);
    if(r==false){alert("用户名只能用英文、数字、中文,不能用别的,数字不能在开头")}
}
</script>

#11



楼上的代码 /^[\u4E00-\u9FA5|a-zA-Z][\u4E00-\u9FA5|0-9a-zA-Z]*$/  是什么意思?看不懂

#12


to  wanghr100(灰豆宝宝.net)
老兄真高手也,经常看到你贴些有分量的内容,不过,你给的这个函数里我没看出来如何做到检查数字是不是在开头的。

#13


最好2边都检测。。。。。

输入的时候用正值表达式检查
提交后再检查次,防止外部提交

#14


有的. 

 var reg = /^[\u4E00-\u9FA5|a-zA-Z][\u4E00-\u9FA5|0-9a-zA-Z]*$/

^[\u4E00-\u9FA5|a-zA-Z]  开头只能用 中文或英文.

[\u4E00-\u9FA5|0-9a-zA-Z]* 紧接着就是可以中文英文,还有数字.


附:

Microsoft Windows脚本技术
http://vip.5d.cn/friday/upload/SCRIPT56.chm 
//有正则资料,语法介绍.