正则表达式问题,高分求救

phper2008 2007-03-22 10:31:39
需要规定输入的字符串长度4-20位 可以由0-9 a-z A-Z - _和汉字组成
如果有汉字 一个汉字要占两位长度算 怎么写这个表达式啊?
...全文
242 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
-过客- 2007-03-22
  • 打赏
  • 举报
回复
情况确实是这样的,MaxLength是按字数,而不是字符数计算的,看来只能是像大家说的,用函数判断长度,然后用正则判断规则了

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

PS:其实4-20位,正则不是不可以,只是需要考虑的情况太多,写出来恐怕得数千字符,而且也不是一时半会就能写出来的,没有完全测试好,就贴了代码,抱歉了
ylqmf 2007-03-22
  • 打赏
  • 举报
回复
hertcloud(·£孙子兵法£·) ( ) 信誉:100 Blog 2007-03-22 11:08:32 得分: 0


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


phper2008 2007-03-22
  • 打赏
  • 举报
回复
up!
phper2008 2007-03-22
  • 打赏
  • 举报
回复
按楼上说的也就是实现不了了?
是不是就可以结贴了!
hertcloud 2007-03-22
  • 打赏
  • 举报
回复
楼主应该先使用上面的函数判断长度
在判断是否符合规则
([0-9]|[a-z]|[A-Z]|[\u4e00-\u9fa5]){4-20}
hertcloud 2007-03-22
  • 打赏
  • 举报
回复
这个需要你在 服务器端 验证
那个限制输入 没用 你要知道 客户端的东西 你是不能控制的.
phper2008 2007-03-22
  • 打赏
  • 举报
回复
lxcnn(过客)

谢谢了,不管多麻烦 我就是要这种效果!
kent880 2007-03-22
  • 打赏
  • 举报
回复
我也在找这个问题的解决办法,谢谢各位了~!
-过客- 2007-03-22
  • 打赏
  • 举报
回复
哦,不好意思,又测试了一下,MS设置MaxLength为20,中文也是20个字来计算的,我再看下,如果是这样,估计就不要用正则来实现了
honkerhero 2007-03-22
  • 打赏
  • 举报
回复
正则是不是累了点,情况分太多了
weiyong922 2007-03-22
  • 打赏
  • 举报
回复
up
-过客- 2007-03-22
  • 打赏
  • 举报
回复
正则倒也不是不可以实现,不过确实是太麻烦了,长度为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]*?$)
hertcloud 2007-03-22
  • 打赏
  • 举报
回复
/// <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;
}
jsyxo 2007-03-22
  • 打赏
  • 举报
回复
可用js 判断。或C#判断长度。正则检查字符合法性。
==
个人觉得幕白兄的这个办法可行
phper2008 2007-03-22
  • 打赏
  • 举报
回复
cpp2017(慕白兄),多谢!

大哥,我知道可以用程序控制,如果那样我就不需要提问了!
我整个页面好多都用验证控件来判断的,我想使页面统一,所以尽量能使用正则来判断,不知道这个问题是麻烦还是根本没办法用正则来搞!
如果是没办法做那就不在线等了!
如果是能搞定,则继续关注!~~
phper2008 2007-03-22
  • 打赏
  • 举报
回复
谢谢楼上两位的回答,但是你们都是没有确定一个汉字按两位长度来算,[\u4e00-\u9fa5]是汉字的范围,但是还是一个汉字当成了一个字符,比如 我输入"高手"两字 本来是当成4位算的,应该提示正确,但是实际上按照楼上的显示不符合要求!
继续关注,希望有高人解燃眉之急!~~
cpp2017 2007-03-22
  • 打赏
  • 举报
回复
用正则比较麻烦,主要是占位的问题。 简单的方法,把数据字段类型加个n就可以了。 另:可用js 判断。或C#判断长度。正则检查字符合法性。
michney 2007-03-22
  • 打赏
  • 举报
回复
[0-9a-zA-Z\u4e00-\u9fa5]{4-10}
phper2008 2007-03-22
  • 打赏
  • 举报
回复
这样好象不行吧,还是把汉字当成了一个字符算了!
ddltxj 2007-03-22
  • 打赏
  • 举报
回复
/S{4,20}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧