在我的工作中遇到这样一种问题,需要从一大段文本中找到中文数字并转换为阿拉伯数字,有时又要做相反的工作。如果中文数字和阿拉伯数字有一样的书写规则,那么一切不成问题,然而事实不是这样。
一到九很好确定,但在大于十的数呢?大于二十的数呢?甚至是大于一百的数呢?
因为工作中仅需要处理一到九十九的数,于是为这一系列数字写了一个有缺陷的正则表达式。过程如下:
1、首先还是要统一数字的书写规则。我所面对的文本有点操蛋,23有的写为“二十三”,有的写为“二三”,11一般写为“十一”,但又有的时候写为“一十一”。好了,先统一规则,比如23只能写为“二十三”,11只能写为“十一”。于是不得不对“二三”、“一十一”这种数字做一个正则表达式,将那些操蛋的家伙打掉。于是一到九十九的数字剩下以下四种格式:一至九,十几,几十几,几十及十。
2、后面的事情就好办了。我写为:/([二三四五六七八九]?十)?[一二三四五六七八九]?/然后再将搜索到的字符串按相应的四种规则转换为阿拉伯数字形式。
但这个正则表达式有缺陷,他可以匹配空字符,但在这并不影响我的工作,所以没有对他进行优化。那么进一步呢?在会计方面,大写中文数字或许比较规则,但日常行文中,大于一百的数字书写相当杂乱,如我看到过的“二零八十”=“二千八十”=“二千零八十”。
符合会计中大写中文数字书写规则的规范是怎样的?正则表达式如何写呢?或许有一天我会用到,你也会用到(百度上没搜到)。
一到九很好确定,但在大于十的数呢?大于二十的数呢?甚至是大于一百的数呢?
因为工作中仅需要处理一到九十九的数,于是为这一系列数字写了一个有缺陷的正则表达式。过程如下:
1、首先还是要统一数字的书写规则。我所面对的文本有点操蛋,23有的写为“二十三”,有的写为“二三”,11一般写为“十一”,但又有的时候写为“一十一”。好了,先统一规则,比如23只能写为“二十三”,11只能写为“十一”。于是不得不对“二三”、“一十一”这种数字做一个正则表达式,将那些操蛋的家伙打掉。于是一到九十九的数字剩下以下四种格式:一至九,十几,几十几,几十及十。
2、后面的事情就好办了。我写为:/([二三四五六七八九]?十)?[一二三四五六七八九]?/然后再将搜索到的字符串按相应的四种规则转换为阿拉伯数字形式。
但这个正则表达式有缺陷,他可以匹配空字符,但在这并不影响我的工作,所以没有对他进行优化。那么进一步呢?在会计方面,大写中文数字或许比较规则,但日常行文中,大于一百的数字书写相当杂乱,如我看到过的“二零八十”=“二千八十”=“二千零八十”。
符合会计中大写中文数字书写规则的规范是怎样的?正则表达式如何写呢?或许有一天我会用到,你也会用到(百度上没搜到)。
解决方案 »
- 求js或php技术论坛地址
- 文本框文字改变事件
- 关于JSP向JS传递数据的问题
- 两个元素怎么用正则表达式只匹配第一个
- 传值没有成功
- 几行代码请助?
- 我编的程序中,有些字符串是以xml的形式存在的,怎么用javascript来解析??
- 急!!~~~,如何在CSS里写onmouseover和onmouseout的变化函数啊???
- 小弟﹐用ASP+VBSCRIPT在Dreamweaver mx中做了一個業務資料系統﹐老板想要圖表化﹐z知道業務進展﹐不知道有沒有控件﹐直接在Dreamweaver m
- ExtJs Ext.define 怎么通过ajax获取数据显示在前台?
- jquery的$.ajax浏览器兼容问题
- 为什么document.getElementById("id")总是为null?
不单单是中文数字,英文数字用正则也难搞。
如果他们不标准,责任在他们,让他们自己先去改好.
你想想,“二零八十”如果在二和零中间加个"万"成啥了? 二万零八十.
“二千八十”在八前面加个五,成"二千五八十",因为“二零八十”如果允许说得通,那"五八十"自然也就通.
哪行有哪行的规矩,怎么可能让他们乱来.
有理,对应规则要明确。
不过一般在会计领域之外,中文数字多半是用作序号,那么一到九十九就基本够用了。
发贴的初衷是想大家讨论下,看看能不能写出一个通用的正则表达式。
2·阿拉伯数字中间连续有几个"0"时,中文大写金额中间可以只写一个"零"字,如¥6007.14,应写成人民币陆仟零柒元壹角肆分。
3·阿拉伯金额数字万位和元位是"0",或者数字中间连续有几个"0",万位、元位也是"0",但千位、角位不是"0"时,中文大写金额中可以只写一个零字,也可以不写"零"字。如¥1680.32,应写成人民币壹仟陆佰捌拾元零叁角贰分,或者写成人民币壹仟陆佰捌拾元叁角贰分,又如¥107000.53,应写成人民币壹拾万柒仟元零伍角叁分,或者写成人民币壹拾万零柒仟元伍角叁分。
4·阿拉伯金额数字角位是"0",而分位不是"0"时,中文大写金额"元"后面应写"零"字。如¥16409.02,应写成人民币壹万陆仟肆佰零玖元零贰分;又如¥325.04,应写成人民币叁佰贰拾伍元零肆分。以上是会计方面的书写规则,去除关于角和分的描述,就是整数的中文书写规则:
1·阿拉伯数字中间有"0"时,中文大写要写"零"字,如1409,应写成一千四百零九。
2·阿拉伯数字中间连续有几个"0"时,中文大写数字中间只写一个"零"字,如6007,应写成六千零七。
其实也就两条关于0规则。一般中文数字用作序号的话,1-10,0000也就够了。
参考一到九十九的正则表达式和上述两条规则,中文数字规则又当如何定? 1-10,0000的正则表达式怎么写?