[英]JavaScript Number to Letter
我最近一直在尝试编码一些JS代码将字母转换为数字的问题,例如。 1 = a。
我当前的代码如下所示(使用HTML脚本标签):
<html>
<script language="javascript" type="text/javascript">
<!-- Begin
function convert(input) {
var inputlength = input.length;
input = input.toLowerCase();
var phonenumber = "";
for (i = 0; i < inputlength; i++) {
var character = input.charAt(i);
switch (character) {
case '0':
phonenumber += "0";
break
case 'a':
phonenumber += "1 ";
break;
case 'b':
phonenumber += "2 ";
break;
case 'c':
phonenumber += "3 ";
break;
case 'd':
phonenumber += "4 ";
break;
case 'e':
phonenumber += "5 ";
break;
case 'f':
phonenumber += "6 ";
break;
case 'g':
phonenumber += "7 ";
break;
case 'h':
phonenumber += "8 ";
break;
case 'i':
phonenumber += "9 ";
break;
case 'j':
phonenumber += "10 ";
break;
case 'k':
phonenumber += "11 ";
break;
case 'l':
phonenumber += "12 ";
break;
case 'm':
phonenumber += "13 ";
break;
case 'n':
phonenumber += "14 ";
break;
case 'o':
phonenumber += "15 ";
break;
case 'p':
phonenumber += "16 ";
break;
case 'q':
phonenumber += "17 ";
break;
case 'r':
phonenumber += "18 ";
break;
case 's':
phonenumber += "19 ";
break;
case 't':
phonenumber += "20 ";
break;
case 'u':
phonenumber += "21 ";
break;
case 'v':
phonenumber += "22 ";
break;
case 'w':
phonenumber += "23 ";
break;
case 'x':
phonenumber += "24 ";
break;
case 'y':
phonenumber += "25 ";
break;
case 'z':
phonenumber += "26 ";
break;
case '-':
phonenumber += "-";
break;
case '1':
phonenumber += "a";
break;
case '2':
phonenumber += "b";
break;
case '3':
phonenumber += "c";
break;
case '4':
phonenumber += "d";
break;
case '5':
phonenumber += "e";
break;
case '6':
phonenumber += "f";
break;
case '7':
phonenumber += "g";
break;
case '8':
phonenumber += "h";
break;
case '9':
phonenumber += "i";
break;
case '1-0':
phonenumber += "j";
break;
case '1-1':
phonenumber += "k";
break;
case '1-2':
phonenumber += "l";
break;
case '1-3':
phonenumber += "m";
break;
case '1-4':
phonenumber += "n";
break;
case '1-5':
phonenumber += "o";
break;
case '1-6':
phonenumber += "p";
break;
case '1-7':
phonenumber += "q";
break;
case '1-8':
phonenumber += "r";
break;
case '1-9':
phonenumber += "s";
break;
case '2-0':
phonenumber += "t";
break;
case '2-1':
phonenumber += "u";
break;
case '2-2':
phonenumber += "v";
break;
case '2-3':
phonenumber += "w";
break;
case '2-4':
phonenumber += "x";
break;
case '2-5':
phonenumber += "y";
break;
case '2-6':
phonenumber += "z";
break;
}
}
document.myform.number.value = phonenumber;
return true;
}
// End -->
</script>
<form name=myform>
<table border=0>
<tr>
<td>Alphanumeric #:</td>
<td>
<input type=text size=20 maxlength=20 name=alphabet value="Will123">
</td>
</tr>
<tr>
<td>Converted #:</td>
<td>
<input type="text" size=20 maxlength=20 name="number">
</td>
</tr>
<tr>
<td align=center colspan=2>
<input type=button value="Convert" onClick="return convert(document.myform.alphabet.value)">
</td>
</table>
</form>
</html>
但是,每当我尝试将对应于x(24)的数字转换为字母时,都会给我“ bd”,因为它是分别处理2和4。 有没有一种简单的方法可以阻止这种情况,以便在我输入24时产生“ x”?
遍历输入时,您正在调用input.charAt(i)
,但这一次只会拉一个字符。 如果要它拉两位数的数字,则需要编写代码。 否则,一次只能读取并处理一位数字。
拉动单个字符时,请检查它是否在0到9之间(包括0和9)。 如果是的话,请遍历接下来的几个字符并构建所需的字符串,然后再将其传递到switch
,这样您就可以获取所需的多位数字输入。
您应该执行以下操作:
function covert(input)
{
var alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"];
var nums=["1","2","3","4","5","6","7","8","9","1-0","1-1","1-2","1-3","1-4","1-5","1-6","1-7,"1-8","1-9","2-0","2-1",2-2","2-3","2-4",2-5",2-6"]
var letters = input.lowerCase().split("");
for(var i=0;i<letters.length;i++)
if(letters[i].lowerCase != letters[i].toUpperCase()) //Checking if it's a letter
phonenumber+=toString(alphabet.indexOf(letter[i])+1;);
var dashesAndNum=input.replace(/[A-Za-z],' ').split(" ");
for(var i=0;i<dashesAndNum.length;i++)
if(dashesAndNum[i] == "0" || dashesAndNum[i] == "-")
phonenumber+=dashesAndNum[i];
else
phonenumber+=alphabet[num.indexOf(dashesAndNum[i])];
document.myform.number.value = phonenumber;
return true;
}
考虑一下-
在生成的数字之间。 这意味着,您不能使用-
用数字括起来的东西进行编码。
function convert(input) {
var inputlength = input.length,
CODE = '0abcdefghijklmnopqrstuvwxyz',
phonenumber = "",
character,
i;
input = input.toLowerCase();
for (i = 0; i < inputlength; i++) {
character = input[i];
if (isFinite(input[i]) && '-' === input[i + 1] && isFinite(input[i+2])) {
i += 2;
character += input[i];
}
phonenumber += ~CODE.indexOf(character) ? ('' + CODE.indexOf(character)).split('').join('-') : (character === '-' ? '-' : CODE[character]);
}
document.myform.number.value = phonenumber;
return true;
}
解决-
问题的合适方法是为2位数字实现一个不同的字符作为符号,也许是|
所以代码看起来像这样:
function convert(input) {
var inputlength = input.length,
CODE= '0abcdefghijklmnopqrstuvwxyz',
SEPARATOR = '|',
phonenumber = "",
character,
i;
input = input.toLowerCase();
for (i = 0; i < inputlength; i++) {
character = input[i];
if (isFinite(input[i]) && SEPARATOR === input[i + 1] && isFinite(input[i + 2])) {
i += 2;
character += input[i];
}
phonenumber += ~CODE.indexOf(character) ? ('' + CODE.indexOf(character)).split('').join(SEPARATOR) : (character === '-' ? '-' : CODE[character]);
}
document.myform.number.value = phonenumber;
return true;
}
尝试这个:
String.fromCharCode(96+24)
您可以在其中用其他数字替换24。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.