首页 碎碎念 博客 IT博客 音乐 旅途 你(U) 关于
编程语言 服务器 日常 其他
你正在阅读:

PHP和JS验证中文字符的正则表达式

编程语言
发布时间:2015-03-20

PHP和JS验证中文字符的正则表达式

    最近捡回一个登录注册系统,需要对用户昵称做字符控制,只能允许为中文字符、数字、英文和下划线组成,一开始写了一大堆的正则,都卡在了对中文的匹配上,无奈中只能Google。

    最先找到的是这个“/\x80-\xff/”,一开始测试一下没有发现什么问题,接着在注册测试中无意中输入了“¥”这个符号,发现居然能过,才注意到还有全角字符的存在,居然就活生生被忽略了。于是换了一个匹配模式“/chr(0xa1).'-'.chr(0xff)/”,还是一样的问题,全角字符还是被匹配进来了。于是继续搜寻,在一篇博客中看到了解决的方案:

    使用“\x{4e00}-\x{9fa5}”这个正则表达式便可以正确匹配出中文字符,不包含全角字符。于是问题得到解决。我的编码环境是UTF-8的,附上当时的PHP代码:

function checkNick($nick){
	if(!empty($nick)){
		if(preg_match("/^[0-9a-zA-Z\x{4e00}-\x{9fa5}_]+$/u", $nick) && mb_strlen($nick, 'utf-8') >= 4 && mb_strlen($nick, 'utf-8') <= 16){
			return true;
		}
	}
	return false;
}

    上面用到的正则修正符u,用于在utf-8编码下面匹配。附上当时提供帮助的博客地址:PHP匹配中文正则,感谢文章原作者的深入研究。


    前端验证通过js就简单多了,首先 Unicode码从 u4e00-u9fbf 表示(中日韩)统一表意字符,uF900-uFAFF 为unicodeCJK兼容象形文字, uFF00-uFFEF 为全角字符,所以匹配上面字符要求的正则表达式为:

/^[0-9a-zA-Z\u4E00-\u9FA5\uF900-\uFA2D_^\uFF00-\uFFEF]+$/

    



旧站-时光博物馆
OursTime.cn All Right Reserve @2013-2022
粤ICP备15028708号
部分文章来自互联网,如侵犯隐私或版权请联系 610559722(at)qq.com 撤稿