求一个正则表达式或者帮我改一下,先谢谢各位

tmtiankong 2008-05-08 03:52:40
^([^\uFF00-\uFFFF]{0,32}){0,1}([\uFF00-\uFFFF]{0,16}){0,1}$
这个正则式匹配用户输入的半角字符数32位之间和或全角字符数16位之间
但是我的这个正则可以匹配先输入半角全角的 或者输入全角的 混和输入不支持
怎么做呢 我不会了
...全文
348 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuciitc 2008-05-09
  • 打赏
  • 举报
回复
代码资料挺全,推荐一下:http://www.ciitc.com
zero1111 2008-05-08
  • 打赏
  • 举报
回复
学习一下.
tmtiankong 2008-05-08
  • 打赏
  • 举报
回复
谢谢大家了 谢谢yami251139 谢谢火龙果 结贴了
yami251139 2008-05-08
  • 打赏
  • 举报
回复
public static void main(String[] args) throws IOException { 
String str = "1234536三五3六七3十738912345一6789012六35678901一二三四五六一一";
String regex1 =
"(?=(?:[^\u0000-\u00ff]*[\u0000-\u00ff][^\u0000-\u00ff]*){0,32}$)" +
"(?=(?:[\u0000-\u00ff]*[^\u0000-\u00ff][\u0000-\u00ff]*){0,16}$)" +
".{0,48}";
System.out.println(str.matches(regex1));

System.out.println(str.length());

char[] cs = str.toCharArray();
int a = 0, b = 0;
for(char c : cs) {
if(c > 0xff){
b++;
}else{
a++;
}
}
System.out.println("半角个数:" + a + ",全角个数:" + b);
}

============
这个也是。。。
yami251139 2008-05-08
  • 打赏
  • 举报
回复
public static void main(String[] args) throws IOException { 
String str = "123456三四五六七八十738912345一6789012六35678901一二三四五六一一";
String regex1 = "(?=(?:[^\u0000-\u00ff]*[\u0000-\u00ff][^\u0000-\u00ff]*){0,32}$).{0,48}";
String regex2 = "(?=(?:[\u0000-\u00ff]*[^\u0000-\u00ff][\u0000-\u00ff]*){0,16}$).{0,48}";
System.out.println(str.matches(regex1));
System.out.println(str.matches(regex2));
System.out.println(str.length());

char[] cs = str.toCharArray();
int a = 0, b = 0;
for(char c : cs) {
if(c > 0xff){
b++;
}else{
a++;
}
}
System.out.println("半角个数:" + a + ",全角个数:" + b);
}

==================================
以上转自火龙果原创,所以错了表怪我。。。如果会错的话。。。
tmtiankong 2008-05-08
  • 打赏
  • 举报
回复
怎么实现啊 郁闷啊
tmtiankong 2008-05-08
  • 打赏
  • 举报
回复
不行 呵呵
yami251139 2008-05-08
  • 打赏
  • 举报
回复
^(([^\uFF00-\uFFFF]{0,32}?)([\uFF00-\uFFFF]{0,16}?))*?$
tmtiankong 2008-05-08
  • 打赏
  • 举报
回复
对了 正解 我的表达不好 不好意思以后努力 请问您有好的办法吗 最好正则了
  • 打赏
  • 举报
回复
我的理解是这样的:

一个字符串最多允许出现 32 个半角字符和 16 个全角字符,也就是最多 48 个字符,全半角的顺序不限。

tmtiankong 2008-05-08
  • 打赏
  • 举报
回复
我乱了 那我的怎么可以呢
  • 打赏
  • 举报
回复
这是 Unicode 码表 U+FF00~U+FFEF 的字符,显示不是你所说的全角或半角

yami251139 2008-05-08
  • 打赏
  • 举报
回复
^([^\uFF00-\uFFFF]{0,32}?)([\uFF00-\uFFFF]{0,16}?)$
感觉很奇怪。。。
应该有更方便的方法吧。。。
tmtiankong 2008-05-08
  • 打赏
  • 举报
回复
^[^\uFF00-\uFFFF]$ 这个是全角
^[\uFF00-\uFFFF]*$ 这个是半角
半角字符的ASCII码范围是0-127
这样说对吗 我已经测试 这样可以判断 还有好的方法吗
tmtiankong 2008-05-08
  • 打赏
  • 举报
回复
这个正则式匹配用户输入的半角字符数32位之间和或全角字符数16位之

就是半角个数32个 全角个数16个


2,你是要只匹配数字的全角、半角,还是所有字符的全角、半角?
所有的字符 不限制数字还是中文

3,具体要做些什么你都没有说,只说了你写的表达式如何如何

就是用于表单输入验证 我是用Struts框架做mask验证
yami251139 2008-05-08
  • 打赏
  • 举报
回复
\uFF00-\uFFFF
??? 什么意思
  • 打赏
  • 举报
回复
[\uFF00-\uFFFF] 从哪看来的这个表示全角字符?
tmtiankong 2008-05-08
  • 打赏
  • 举报
回复
我写的那个正则^[^\uFF00-\uFFFF]{0,32}[\uFF00-\uFFFF]{0,16}$
要是全角半角顺序打乱 类似这样的“e1w我rwe我3353e1”就无法判断输入的全角个数和半角个个数 也就是说没办法验证输入个数了 有点乱了
  • 打赏
  • 举报
回复
楼主,你的问题并不是没人回答,而是人家都看不懂要做什么:

这个正则式匹配用户输入的半角字符数32位之间和或全角字符数16位之

1,什么叫 XX 位之间啊?
2,你是要只匹配数字的全角、半角,还是所有字符的全角、半角?
3,具体要做些什么你都没有说,只说了你写的表达式如何如何

上面仅仅是从题目看出来的问题,如果能说得详细清楚的话,可以帮你解决。

你说的这些我是一句都没看懂。

如果要问正则表达式的问题,请把具体的要求讲清楚,比如说一些示例,
以及要达到的效果,说得越详细正则表达式的匹配的容错性就越强。
tmtiankong 2008-05-08
  • 打赏
  • 举报
回复
用户只可以输入半角字符32个和全角字符16个
用户也可以只输入半角32个或者全角16个
就是验证这个全角半角的个数的
加载更多回复(17)

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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