我认为处理这个问题的最好方法是创建一个可以依次评估的正则表达式列表。如果您找到匹配项,那么您就知道您的类型,如果您没有找到匹配项,那么您可以假设它只是一种刺痛类型。
正则表达式列表可以与数组中的数据类型配对,如下所示:
var patterns = [
[
'int', /^[\d]+$/],
[
'float', /^[-+]?[0-9]*\.?[0-9]+$/],
[
'date', /^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](19|20)\d\d$/]
];
注意:日期格式必须为dd/mm/yyyy
,但可以根据需要更改
然后假设 html 有几个字段(#min
和#max
),我们可以创建这个函数(注意使用 JQuery):
function compare() {
var min = $("#min").val();
var max = $("#max").val();
if (min === "" || max === "") {
alert("data missing - check down the sofa");
return;
}
var dataType = "string";
for (var i = 0; i < patterns.length; i++) {
if (patterns[i][1].test(min) && patterns[i][2].test(max)) {
dataType = patterns[i][0];
break;
}
}
alert("Min and Max are of type: " + dataType);
}
重要的是要注意两个字段必须具有相同的数据类型,如果它们不一样,那么它将产生一个string
数据类型。
这是一个工作示例
如果你想扩展它来验证范围,你可以这样做:
function checkRange(dataType, min, max) {
var minValue, maxValue;
switch (dataType) {
case 'int':
{
minValue = parseInt(min, 10);
maxValue = parseInt(max, 10);
}
break;
case 'float':
{
minValue = parseFloat(min);
maxValue = parseFloat(max);
}
break;
case 'date':
{
minValue = $.datepicker.parseDate('dd/mm/yy', min);
maxValue = $.datepicker.parseDate('dd/mm/yy', max);
}
break;
case 'string':
{
minValue = min;
maxValue = max;
}
break;
}
return minValue <= maxValue;
}
这是一个工作示例(注意:JQuery UI 用于解析日期)