求正则表达式

Future_Hui_ 2010-02-26 11:22:27
是这样的:
输入一个数字,最长为20位,如果有小数位,小数位后面最长为4位。

求此正则表达式,且基本能在eclipse中运行的代码。。

在此先谢谢了!!!
...全文
166 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
TillPerfect 2010-02-26
  • 打赏
  • 举报
回复
包括小数点,也是要20位么?
Future_Hui_ 2010-02-26
  • 打赏
  • 举报
回复
引用 2 楼 xierangh 的回复:
(? <\.)\d{1,20}(\.\d{1,4})?(?!\.)


兄弟,你这个我有点看不懂哦。。
Future_Hui_ 2010-02-26
  • 打赏
  • 举报
回复
引用 1 楼 bayougeng 的回复:
^\d{1,20}(\.\d{1,4})?$
这是正则,如果写到字符串里,应该是这样:
String pattern = "^\\d{1,20}(\\.\\d{1,4})?$";


你这个正则 为什么 我输入11111111111 提示不合法呢?
xierangh 2010-02-26
  • 打赏
  • 举报
回复
(?<\.)\d{1,20}(\.\d{1,4})?(?!\.)
bayougeng 2010-02-26
  • 打赏
  • 举报
回复
^\d{1,20}(\.\d{1,4})?$
这是正则,如果写到字符串里,应该是这样:
String pattern = "^\\d{1,20}(\\.\\d{1,4})?$";
jianghandaxue 2010-02-26
  • 打赏
  • 举报
回复
引用 6 楼 bayougeng 的回复:
你怎么测的?
Java code Pattern ptn= Pattern.compile("^\\d{1,20}(\\.\\d{1,4})?$");
System.out.println(ptn.matcher("11111111111111111111").matches());
System.out.println(ptn.matcher("11111111111111111111.1111").matches());
System.out.println(ptn.matcher("1").matches());
System.out.println(ptn.matcher("1.").matches());
System.out.println(ptn.matcher("1.1").matches());


up
ychzxx 2010-02-26
  • 打赏
  • 举报
回复
刚才有漏洞,能匹配以小数点结尾的情况,这个可以
^[1-9]\d{0-19}$|^[1-9]\d{0-17}\.\d$|^[1-9]\d{0-16}\.\d{1-2}$|^[1-9]\d{0-15}\.\d{1-3}$|^[1-9]\d{0-14}\.\d{1-4}$
ychzxx 2010-02-26
  • 打赏
  • 举报
回复
用个笨办法:
^[1-9]\d{0-19}$|^[1-9]\d{0-17}\.\d$|^[1-9]\d{0-16}\.\d{0-2}$|^[1-9]\d{0-15}\.\d{0-3}$|^[1-9]\d{0-14}\.\d{0-4}$
岁月之梦 2010-02-26
  • 打赏
  • 举报
回复
写判断加正则 ! 回复内容太短了!
水中影子 2010-02-26
  • 打赏
  • 举报
回复
楼主先验证长度,再用正则表达式
^\\d{1,20}(\\.\\d{1,4})?$
TillPerfect 2010-02-26
  • 打赏
  • 举报
回复
如果限制开头为零的话,在JAVA代码里使用:

Pattern p = Pattern
.compile("^([1-9]\\d{1,19}|[1-9]\\d{1,17}\\.\\d|\\[1-9]d{1,16}\\.\\d{2}|[1-9]\\d{1,15}\\.\\d{3}|[1-9]\\d{1,14}\\.\\d{4})$");


在 JavaScript 里使用:

inputvalue.match(/^([1-9]\d{1,19}|[1-9]\d{1,17}\.\d|[1-9]\d{1,16}\.\d{2}|[1-9]\d{1,15}\.\d{3}|[1-9]\d{1,14}\.\d{4})$/)


建议lz采用 12楼的话,先判断长度,再用正则,这样的话,正则表达式就不要这么长了
Future_Hui_ 2010-02-26
  • 打赏
  • 举报
回复
引用 13 楼 tillperfect 的回复:
我们是否应当限制数字的开头不能为0?


多谢!需要考虑
Future_Hui_ 2010-02-26
  • 打赏
  • 举报
回复
引用 11 楼 xierangh 的回复:
引用 4 楼 future_hui_ 的回复:
引用 2 楼 xierangh 的回复:(?!<\.)\d{1,20}(\.\d{1,4})?(?!\.)

兄弟,你这个我有点看不懂哦。。
(?! <\.)环视也叫断言,意思是:\d{1,20}前不能有小数点


你这个放在jave代码中去验证,如何转义呢?
TillPerfect 2010-02-26
  • 打赏
  • 举报
回复
我们是否应当限制数字的开头不能为0?
bayougeng 2010-02-26
  • 打赏
  • 举报
回复
我觉得你完全可以只用java代码验证长度,然后用正则验证数值有效嘛。
xierangh 2010-02-26
  • 打赏
  • 举报
回复
引用 4 楼 future_hui_ 的回复:
引用 2 楼 xierangh 的回复:(?!<\.)\d{1,20}(\.\d{1,4})?(?!\.)

兄弟,你这个我有点看不懂哦。。

(?!<\.)环视也叫断言,意思是:\d{1,20}前不能有小数点
Future_Hui_ 2010-02-26
  • 打赏
  • 举报
回复
引用 8 楼 bayougeng 的回复:
这好像就有点麻烦了。

如果麻烦的话,我只能写傻瓜式代码,用if-else了。呵呵
Future_Hui_ 2010-02-26
  • 打赏
  • 举报
回复
引用 6 楼 bayougeng 的回复:
你怎么测的?
Java code Pattern ptn= Pattern.compile("^\\d{1,20}(\\.\\d{1,4})?$");
System.out.println(ptn.matcher("11111111111111111111").matches());
System.out.println(ptn.matcher("11111111111111111111.1111").matches());
System.out.println(ptn.matcher("1").matches());
System.out.println(ptn.matcher("1.").matches());
System.out.println(ptn.matcher("1.1").matches());

你的结果为:
true
true
true
false
true

但是第二个应该为false,因为总长度大于20了。
bayougeng 2010-02-26
  • 打赏
  • 举报
回复
这好像就有点麻烦了。
Future_Hui_ 2010-02-26
  • 打赏
  • 举报
回复
引用 5 楼 tillperfect 的回复:
包括小数点,也是要20位么?

对。。。不管有无小数点,总长都不超过为20位
加载更多回复(1)

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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