Javascript 使用正则表达式区分输入中的数字和单词

Javascript 使用正则表达式区分输入中的数字和单词,javascript,jquery,regex,Javascript,Jquery,Regex,我正在尝试创建一个简单的程序,允许用户输入数字或单词,并按字母顺序(如果是单词)或数字顺序(如果是数字)排序。为此,我需要一个能够区分数字和单词的输入,例如10、-10、0.5和-0.5将被评估为数字,其他所有内容都将被视为单词 到目前为止,我已经得出了以下结论: function recordUserInput() { userInput = $('input').val(); if (userInput.charAt(0).match(/^(-)?[0-9]/)) { co

我正在尝试创建一个简单的程序,允许用户输入数字或单词,并按字母顺序(如果是单词)或数字顺序(如果是数字)排序。为此,我需要一个能够区分数字和单词的输入,例如10、-10、0.5和-0.5将被评估为数字,其他所有内容都将被视为单词

到目前为止,我已经得出了以下结论:

function recordUserInput() {
  userInput = $('input').val();

  if (userInput.charAt(0).match(/^(-)?[0-9]/)) {
    console.log('number', userInput);
  }
  else {
    console.log('text', userInput);
  }

}
但是,负数仍然作为文本计算


我做错了什么?

使用一元
+
。如果它返回
NaN
,则它不是一个数字

var type = isNaN(+userInput) ? 'text' : 'number';

parseFloat
可能不是最优的。它从左到右解析查找一个数字,并在非数字上停止。它收集了什么,就变成了一个数字
parseFloat('123a')==123

使用一元数
+
。如果它返回
NaN
,则它不是一个数字

var type = isNaN(+userInput) ? 'text' : 'number';
parseFloat
可能不是最优的。它从左到右解析查找一个数字,并在非数字上停止。它收集了什么,就变成了一个数字
parseFloat('123a')==123
不要使用
.charAt(0)
,因为您只查看第一个字符。相反,正则表达式旨在查看整个输入,所以只需这样做(但在末尾添加
+
$
):

将输入放入数组后,可以按如下方式对其排序(这也演示了如何更好地测试数字):

//示例输入:
变量输入=['z',1',a',9,3];
输入.排序(函数(a,b){
返回isNaN(a)-isNaN(b)| isNaN(a)和&a.localeCompare(b)|+a-+b;
});
控制台日志(输入)不要使用
.charAt(0)
,因为您只查看第一个字符。相反,正则表达式旨在查看整个输入,所以只需这样做(但在末尾添加
+
$
):

将输入放入数组后,可以按如下方式对其排序(这也演示了如何更好地测试数字):

//示例输入:
变量输入=['z',1',a',9,3];
输入.排序(函数(a,b){
返回isNaN(a)-isNaN(b)| isNaN(a)和&a.localeCompare(b)|+a-+b;
});

控制台日志(输入)
您可以编写一个小函数
isNumeric()
来正确确定值是否为数字。这类似于中提出的解决方案

函数为数值(val){
return!isNaN(parseFloat(val))和&isFinite(val);
}
原来的函数变成了


您可以编写一个小函数
isNumeric()
来正确确定值是否为数字。这类似于中提出的解决方案

函数为数值(val){
return!isNaN(parseFloat(val))和&isFinite(val);
}
原来的函数变成了


如果要检查用户输入是否为数字,可以使用以下方法:

/^[-+]?\d+\.?\d*$/
它将匹配开头可能包含
-
+
的所有数字和点符号。像
10
-10.0
+10.0

如果要检查用户输入是否为数字,可以使用以下方法:

/^[-+]?\d+\.?\d*$/
它将匹配开头可能包含
-
+
的所有数字和点符号。像
10
-10.0
+10.0

而且他无论如何都需要转换成数字,而不需要
+
isNaN
也可以处理字符串。他需要转换成数字,而不是
+
isNaN
也适用于字符串。我真的认为Joseph的答案是最好的方法,而不是正则表达式。但是,您的正则表达式不起作用的原因是您对正则表达式使用了
charAt(0).match
。在负数的情况下,
charAt(0)
-
,因此它永远不会与
^(-)[0-9]
匹配。你应该简单地使用
userInput.match
我真的认为约瑟夫的答案是最好的方法,而不是正则表达式。但是,您的正则表达式不起作用的原因是您对正则表达式使用了
charAt(0).match
。在负数的情况下,
charAt(0)
-
,因此它永远不会与
^(-)[0-9]
匹配。您应该只使用
userInput.match