我認爲處理這個問題的最好方法是創建一個可以依次評估的正則表達式列表。如果你找到一場比賽,那麼你知道你的類型,如果你沒有找到一個匹配,那麼你可以認爲它只是一個刺痛的類型。
正則表達式列表可以與數據類型在陣列中配對像這樣:
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);
}
我t值得注意的是,兩個字段必須具有相同的數據類型,如果不相同則會導致數據類型爲string
。
Here is a working example
如果你想再擴展,要驗證的範圍內,你可以這樣做是這樣的:
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;
}
Here is a working example(注:JQuery的UI是用來解析日期)
它們都是字符串。爲什麼你想要一個文本框多種格式?不是針對特定用途的範圍? – musefan
到目前爲止您嘗試過什麼?你甚至谷歌,這是你的第一步?你可以使用HTML5嗎? – gdoron
那麼,如何檢查輸入是在最大值和最小值之間?例如,如果用戶輸入日期類型。正如你所說,它認爲作爲一個字符串, – Angel