Translate number to Chinese
一二三 => 零壹貳
by nuysoft
HTML
<input id="number" value="0">
<div id="cn"></div>
CSS
html,
body {
height: 100%;
}
body {
margin: 10px;
pading: 0;
}
input#number {
height: 30%;
width: 100%;
font-size: 2rem;
text-align: center;
}
div#cn {
margin-top: 20px;
height: 60%;
font-size: 3rem;
text-align: center;
}
JavaScript
var NUMBER_LOWER = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'] // 〇
var NUMBER_UPPER = ['零', '壹', '貳', '參', '肆', '伍', '陸', '柒', '捌', '玖']
var UNIT_LOWER = ['', '十', '百', '千']
var UNIT_UPPER = ['', '拾', '佰', '仟']
var UNIT_GROUP_LOWER = ['', '万', '亿', '兆']
var UNIT_GROUP_UPPER = ['', '萬', '億', '兆']
function translate(number, upper) {
var NUMBER = upper ? NUMBER_UPPER : NUMBER_LOWER
var UNIT = upper ? UNIT_UPPER : UNIT_LOWER
var GROUP = upper ? UNIT_GROUP_UPPER : UNIT_GROUP_LOWER
var result = []
// 1234567890 => [ 0 9 8 7 6 5 4 3 2 1 ]
var str = Math.abs(number).toString().split('').reverse()
for (var i = 0, part; i < str.length; i++) {
part = parseInt(i / 4) // 0 9 8 7, 6 5 4 3, 2 1
result[part] = result[part] || []
result[part].push(
NUMBER[str[i]] + // 0 => 零
(str[i] !== '0' ? UNIT[i % 4] : '') // + 十 百 千
)
}
for (var ii = 0; ii < result.length; ii++) {
result[ii] = result[ii].reverse().join('') +
GROUP[ii] // + 万 亿 兆
}
console.log(result)
return (number < 0 ? '负' : '') +
result.reverse().join('')
.replace(/([〇零])[〇零]+/g, '$1')
.replace(/^[一壹](十|拾)/g, '$1')
.replace(/([十拾])[〇零]+/g, '$1')
.replace(/[〇零]+$/g, '')
.replace(/[〇零]([万亿兆萬億兆])/g, '$1')
.replace(/([兆兆])[亿億]/g, '$1')
.replace(/([亿億])[万萬]/g, '$1')
.replace(/([兆兆])[万萬]/g, '$1')
}
$('#number').on('keydown', function(event) {
switch (event.which) {
case 38:
$(event.target).val(+$(event.target).val() + 1)
break
case 40:
$(event.target).val(+$(event.target).val() - 1)
break
}
$(event.target).trigger('input')
})
$('#number').on('input', function(event) {
$('#cn').html(
'<div>' + translate($(event.target).val()) + '</div>' +
'<div>' + translate($(event.target).val(), true) + '</div>'
)
})
$('#number').val(
...