用正则表达式限制文本表单的中/英文字符个数

 表单的最大长度属性maxlength=30限制的不管是中文还是英文的字符均为30个。所以如果处理表单的后台程序是C语言写的(如Thttpd服务器下的WEB),在填充数据时会因为字符长度超过申请的变量空间而报错,因为一个中文字符占两个字节,所以如果maxlength=30时,只能充许输入15个中文字符。所以可以将中文字符置换为两个任意的英文字符再计算长度与maxlength比较,然后再截取符合需要长度。如:

 

<input type="text" maxlength="6" value="" onkeyup="while(value.replace(/[^\x00-\xff]/g, '**').length>maxLength)value=value.slice(0,-1)">

 

\xn匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如:'\x41'匹配"A "。'\x041 '则等价于'\x04 '&"1 "。正则表达式中可以使用ASCII编码。
  
[^\x00-\xff]即ASCII编码不在0-255的字符

 

正则表达式中:\xhh,匹配的是一个十六进制字符hh.(注:h取值范围是0-9a-f)
\x00-\x1f:匹配十进制是0-31的字符;如下图所示:
http://walsh.iteye.com/upload/attachment/138588/e879dc1c-f19a-3954-8426-61a7f4b45ce0.gif
注:Hx下边的那一列正式十六进制数,后边对应的就是字符
\x80-\xff:匹配用GBK (GB2312/GB18030)编码的所有汉字和标点符号

 

你可能感兴趣的:(C++,c,Web,正则表达式,C#)