字符串时间验证(在javascript中)
问题描述:
我有一个接受时间(最多只有5个字符)的文本框和一个接受am或pm值的下拉列表。字符串时间验证(在javascript中)
我需要执行一些验证用于诸如输入到文本框中的字符串值:
- 如果用户输入9 =>应改为0900
- 9:3 => 0930
- 09:3 => 0930
- 93 =>警报('无效时间值)
- 115 => 0115
- 12 => 1200
- 无效条目如!@#$%^ & *()<>?/〜`,;'“[] _- abcdefg .. => alert('Invalid Time Value')应该显示。
到目前为止,我所取得的所有成果都取代了:与''。 例如,如果用户输入09:00 => 0900
我需要类似:
如果CLKS是1位,然后rightpad CLKS与2零。
如果2位:CLKS> 12,则警报(无效小时值)
如果3位:CLKS <(%59)(即检查最后2个字符),然后用1零 或CLKS leftpad> (%59),然后警报('无效分钟值')
如果4位:clks> 12%(检查前2个字符),警报('无效小时值') 或(clks> 12%和clks> 59%),然后警报('无效的时钟时间') 或(clks < 12%)和(clks < 59%),然后按原样接受该号码。
如果5位(且都是数字),然后警报(“无效CLK时间”)
这些验证需要进行脚本标签内完成。 (我已经使用的后端语言是JSP)。
请帮助我:(
下面是代码的一部分,我已经写了:
<script type='text/javascript'>
function clocks(){
var clk = document.getElementById('TIME').value;
var clks = clk.replace('/:/g','');
var ampm = document.getElementById('AMPM').value;
var add = 1200;
if (clks=="")
{
alert("You must enter clock time");
}
else
{
if (ampm=='p')
{
clks=parseFloat(clks) + parseFloat(add);
}
}
}
....
</script>
答
这里有一种方法可以做到它的功能:
function validate_time(clks) {
// Remove any non-digit characters
clks = clks.toString().replace(/\D/g, '');
var is_valid = false;
switch (clks.length) {
case 1:
// This will run if the length is 1 digit.
clks = clks + '00';
// Mark this as a valid time.
is_valid = true;
// stop running the rest
break;
case 2:
if (parseInt(clks) > 12) {
alert("Invalid hours value");
} else {
is_valid = true;
}
break;
case 3:
// Get last two characters
var mins = clks.substr(1,2); // offset 1 character, length of 2 characters
if (parseInt(mins) <= 59) {
clks = '0' + clks;
is_valid = true;
} else {
alert('Invalid minutes value');
}
break;
case 4:
var hours = clks.substr(0,2);
var mins = clks.substr(2,2);
if (parseInt(hours) > 12 || parseInt(mins) > 59) {
alert('Invalid clock time');
} else {
is_valid = true;
}
break;
case 5:
alert("Invalid clock time");
break;
}
var data = { clks: clks, is_valid: is_valid };
return data;
}
调用它,你会做:
var result = validate_time(clks);
并且您的结果将成为传回的对象... result.clks是填充的时间,result.is_valid将是输入时间是否有效的真或假值。
答
function validateTimeNew(obj) {
var timeValue = obj.value;
if (timeValue == "" || timeValue.indexOf(":") < 0) {
alert("Invalid Time format.Valid Format Example 01:56:00 or 23:06:00");
return false;
}
else {
var sHrs = timeValue.split(':')[0];
var smin = timeValue.split(':')[1];
smin = smin.substring(0, 2);
var sAmnPm = timeValue.split(' ')[1] || timeValue.split(':')[2];
if (!isNaN(sAmnPm))
{
sAmnPm = sAmnPm.toUpperCase();
}
var chkAmnPm =timeValue.split(':')[1];
if (chkAmnPm.length == 4)
sAmnPm = chkAmnPm.substring(2, 4);
sAmnPm = sAmnPm.toUpperCase();
if (sHrs == "" || isNaN(sHrs) || parseInt(sHrs) > 23) {
alert("Invalid Time format Hours : "+ sHrs);
return false;
}
else if (parseInt(sHrs) == 0) {
sHrs = "00";
sAmnPm = "AM";
}
else if (sHrs < 10)
{
sHrs = "0" + parseInt(sHrs);
if (sAmnPm != "PM")
sAmnPm = "AM";
}
else if (sHrs > 13) {
sHrs = parseInt(sHrs) - 12;
if (sHrs < 10)
sHrs = "0" + parseInt(sHrs);
sAmnPm = "PM";
}
else if (sHrs == 10)
{
sHrs = parseInt(sHrs);
if (sAmnPm != "PM")
sAmnPm = "AM";
}
if (smin == "" || isNaN(smin) || parseInt(smin) > 59) {
alert("Invalid Time format Minutes :" + smin);
return false;
}
else if (parseInt(smin) == 0)
smin = "00";
else if (smin < 10)
smin = "0" + parseInt(smin);
if (sAmnPm == "" || sAmnPm=="undefined")
{
sAmnPm = "AM"
}
else { sAmnPm = sAmnPm.toUpperCase(); }
obj.value = sHrs + ":" + smin + ":" + sAmnPm;
}
}
9:3 => 0930,09:3 => 0930和93 => 0930出现模棱两可的最好的。你是否需要接受这些投入?如果没有,我只是将这些标记标记为无效。 – deceze 2011-02-12 04:42:02
@ deceze:是的deceze.It也必须为这3个条目工作。这是要求的一部分。 – uno 2011-02-12 04:45:21