Javascript 验证每月的输入
我只允许这种格式:19.30星期五2/10。19:30而不是19:30也是可以接受的。如何轻松做到这一点?请注意,使用全新代码的答案也将被接受Javascript 验证每月的输入,javascript,string,validation,input,Javascript,String,Validation,Input,我只允许这种格式:19.30星期五2/10。19:30而不是19:30也是可以接受的。如何轻松做到这一点?请注意,使用全新代码的答案也将被接受 这是我的尝试,但在本月部分失败了str是我们尝试验证的字符串 var ok = true, index = - 1; for(var i = 0; i < str.length; ++i) { if(i == 0 || i == 1 || i == 3 || i == 4) { if(!$.isNumeric(str[i])) {
这是我的尝试,但在本月部分失败了
str
是我们尝试验证的字符串
var ok = true, index = - 1;
for(var i = 0; i < str.length; ++i) {
if(i == 0 || i == 1 || i == 3 || i == 4) {
if(!$.isNumeric(str[i])) {
ok = false;
break;
}
}
if(i == 2) {
if(str[i] != '.' && str[i] != ':') {
ok = false;
break;
}
}
if(i == 5) {
if(str[i] != ' ') {
ok = false;
break;
} else {
++whitespaces;
}
}
if(i > 5 && index == -1) {
if(!isLetter(str[i])) {
if(str[i] == ' ') {
++whitespaces;
index = i;
} else {
ok = false;
break;
}
}
}
}
for(var i = index + 1; i < str.length; ++i) {
if(i == index + 1 || i == index + 2 || i == index + 4) {
if(!$.isNumeric(str[i])) {
ok = false;
break;
}
} else {
if(str[i] != '.' && str[i] != '/') {
ok = false;
break;
}
}
}
if(!ok || whitespaces != 2) {
alertify.error("Bad format, match creation failed!");
return;
}
var ok=true,index=-1;
对于(变量i=0;i5&&index=-1){
如果(!Isleter(str[i])){
如果(str[i]=''){
++空白;
指数=i;
}否则{
ok=假;
打破
}
}
}
}
对于(变量i=索引+1;i
我真的怀疑用户使用这样的输入字段是否方便,即使您在字段上有一个掩码,我已经说过我看到了几种方法:
- 使用正则表达式验证输入字段(最简单)
- 使用任何输入框掩码插件(谷歌-有数百个)
- (我更喜欢)对日期和时间使用常规控件(如html5日期等,或jquery.ui日期和时间输入),并将javascript日期对象格式化为所需的日期/时间格式
(\d\d?):(\d\d?)\s(\w+)\s(\d\d?/(\d\d?)
将javascript日期对象格式化为您的格式(为简单起见,请使用矩.js):
还可以看看用于日期/时间输入的插件,如下所示
更新:为了澄清我的观点,我真的怀疑您的要求的全部原因仅仅是为了以这种格式获取日期,您将使用日期来表示某些内容,这就是为什么您最好开始将日期作为日期,而不是将某些字符串格式化以满足遗留要求的原因。考虑到你最好使用UI控件来方便日期的输入,比如html5日期输入,或者任何做同样事情的插件。这将使您能够在之后处理日期,如果需要,将其格式化为所需格式(例如,使用moment.js进行高级格式化)这是一个正则表达式解决方案,您只需测试字符串是否与此正则表达式匹配: Regex:
[0-9]{2}[\.:][0-9]{2} [A-Z][a-z]{4,7} ([0-2][0-9]|[3][01])\/(0[1-9]|1[12])
示例:
[0-9]{2}[\.:][0-9]{2} [A-Z][a-z]{4,7} ([0-2][0-9]|[3][01])\/(0[1-9]|1[12])
这是一个工作片段:
var str=“19.30星期五2/10”;
var regex=/[0-9]{2}[\.:][0-9]{2}[A-Z][A-Z]{4,7}[0-9]\/[0-9]{2}/
if(str.match(regex)){
警报(“字符串匹配”);
}否则{
警报(“字符串不匹配!!”;
}
一个简单的例子
var re = /^[0-2][0-9](\.|:)[0-5][0-9] ([a-z]*) [0-9]{1,2}\/[0-9]{1,2}$/;
// the regex above checks
// if the first number is a valid hour (between 00 and 24), then . or :,
// a valid minute number between 00 and 59,
// if you have a space, then a string, another space,
// then a valid month (0 - 12)
// How to use ?
var text = "19.30 Friday 2/10";
console.log(re.test(text)) // return true
以下正则表达式应适用于您: 如果2/10代表2月10日
/^([0-9]|1\d|2[0-3])[\.:]([0-9]|[1-5]\d)\s(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)\s([0-9]|1[0-2])\/([0-9]|[12]\d|3[01])$/
如果2/10代表10月2日
/^([0-9]|1\d|2[0-3])[\.:]([0-9]|[1-5]\d)\s(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)\s([0-9]|[12]\d|3[01])\/([0-9]|1[0-2])$/
正则表达式解释:
- JavaScript中的正则表达式介于
/
自始至终都说,要匹配里面给出的模式^…$
中的内容是一个组,()
匹配([0-9]| 1\d | 2[0-3])
-0
。表达式表示匹配(23
0-9
或
以1和\d(任意数字)开头
或
)两位数字,其中第10位数字应为2,单位位置应在0-3之间(包括0-3)
-下一个标记可以是[\.:]
或
,:
需要转义,因为它是正则表达式中的元字符,与任何内容都匹配
-参考第一点,您将知道这是什么([0-9]|[1-5]\d)
匹配单个空白\s
匹配其中的任何给定模式(星期日|星期一|星期二|星期三|星期四|星期五|星期六)
- 日期和月份的
([0-9]|1[0-2])\/([0-9]|[12]\d|3[01])
var input=[“19.30周五2/10”,
“19.60 2010年2月2日星期五”,
“1.32 2010年2月2日星期五”,
“10月2日星期日10:30”,
“2010年2月2日星期一22:30”,
“10月12日星期六19:30”,
“10月14日星期五19:30”,
“21月2日星期五19:30”,
“2010年3月10日19:1”
];
var输出=”;
对于(变量i=0;i
}
文件写入(输出)
这是一个字符串输入字段吗?我用提示符
@vittore获取字符串。为什么不使用正则表达式?这将是一个有点复杂,但没有那么多@因为我不知道该怎么做!但是我想!你能给出一个答案并举例说明吗?但是,请让我学习,而不仅仅是复制代码!我在网上搜索了一些现成的东西。然而,我发现了这种时尚的日期:时间2015年5月15日
。我希望这一天是可见的,这就是我回到原始解决方案的原因。我需要研究正则表达式(因为我只能假设你的示例的意思)和Date对象,然后…似乎可以工作,但为什么?:)你看,我只需要cp代码就可以了。然而,我没有学习正则表达式。你能帮我学习吗?@gsamaras好的,你说得对。我编辑了我的文章,对当时的整个正则表达式进行了正确的解释,正则表达式可以优化,但非常敏锐