日期:2014-05-19  浏览次数:20447 次

正则表达式问题,高分求救
需要规定输入的字符串长度4-20位   可以由0-9   a-z   A-Z   -   _和汉字组成
如果有汉字   一个汉字要占两位长度算   怎么写这个表达式啊?


------解决方案--------------------
[0-9a-zA-Z\u4e00-\u9fa5]{4-10}
------解决方案--------------------
用正则比较麻烦,主要是占位的问题。 简单的方法,把数据字段类型加个n就可以了。 另:可用js 判断。或C#判断长度。正则检查字符合法性。
------解决方案--------------------
/// <summary>
/// 检测含有中文字符串的实际长度
/// </summary>
/// <param name= "str "> 字符串 </param>
public static int cnLenth(string str)
{
System.Text.ASCIIEncoding n = new System.Text.ASCIIEncoding();
byte[] b = n.GetBytes(str);
int l = 0; // l 为字符串之实际长度
for (int i = 0; i <= b.Length - 1; i++)
{
if (b[i] == 63) //判断是否为汉字或全脚符号
{
l++;
}
l++;
}
return l;
}
------解决方案--------------------
正则倒也不是不可以实现,不过确实是太麻烦了,长度为20可以通过设置MaxLength属性为20来实现,然后正则如下,主要是分多种情况考虑最少4位的问题

^([0-9a-zA-Z -_]{4}[0-9a-zA-Z -_\u4e00-\u9fa5]*?$)|([0-9a-zA-Z -_]{2}[\u4e00-\u9fa5][0-9a-zA-Z -_\u4e00-\u9fa5]*?$)|([\u4e00-\u9fa5][0-9a-zA-Z -_]{2}[0-9a-zA-Z -_\u4e00-\u9fa5]*?$)|[0-9a-zA-Z -_]([\u4e00-\u9fa5][0-9a-zA-Z -_][0-9a-zA-Z -_\u4e00-\u9fa5]*?$)|([\u4e00-\u9fa5]{2}[0-9a-zA-Z -_\u4e00-\u9fa5]*?$)
------解决方案--------------------
这个需要你在 服务器端 验证
那个限制输入 没用 你要知道 客户端的东西 你是不能控制的.
------解决方案--------------------
楼主应该先使用上面的函数判断长度
在判断是否符合规则
([0-9]|[a-z]|[A-Z]|[\u4e00-\u9fa5]){4-20}

------解决方案--------------------
hertcloud(·£孙子兵法£·) ( ) 信誉:100 Blog 2007-03-22 11:08:32 得分: 0


楼主应该先使用上面的函数判断长度
在判断是否符合规则
([0-9]|[a-z]|[A-Z]|[\u4e00-\u9fa5]){4-20}
---------------------------------------------
up



------解决方案--------------------
情况确实是这样的,MaxLength是按字数,而不是字符数计算的,看来只能是像大家说的,用函数判断长度,然后用正则判断规则了

^[0-9a-zA-Z -_\u4e00-\u9fa5]+$

PS:其实4-20位,正则不是不可以,只是需要考虑的情况太多,写出来恐怕得数千字符,而且也不是一时半会就能写出来的,没有完全测试好,就贴了代码,抱歉了