çPOSIX正则表达式来验证输入HH:MM:SS时间字符串 [英] c posix regex to validate input HH:MM:SS time string

查看:345
本文介绍了çPOSIX正则表达式来验证输入HH:MM:SS时间字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

MM:SS时间字符串

正则表达式为HH相关
我想验证用户输入的时间

  INT主(INT ARGC,CHAR *的argv []){
        regex_t正则表达式;
        INT RETI;
        烧焦msgbuf [100];
        炭inputStr2 [100] =12点34分04秒;
        炭inputStr [100] =12:34;/ *编译正前pression * /
        RETI = regcomp(安培;正则表达式^((([01] [0-9] | 2 [0-3]))([0-5] [0-9]):)(???? ?[0-5] [0-9])$,0);
        如果(RETI){
        fprintf中(标准错误,无法编译正则表达式\\ n);
        }/ *执行定期EX pression * /
           的printf(%s是字符串\\ n,inputStr);
        RETI = regexec(&放大器;正则表达式,inputStr,0,NULL,0);
        如果(!RETI){
                看跌期权(匹配);
        }
        否则,如果(RETI == REG_NOMATCH){
                看跌期权(不匹配);
        }
        其他{
                regerror(RETI,和放大器;正则表达式,msgbuf,sizeof的(msgbuf));
                fprintf中(标准错误,正则表达式匹配失败:%S \\ n,msgbuf);
        }
         的printf(%s是字符串\\ n,inputStr2);
        RETI = regexec(&放大器;正则表达式,inputStr2,0,NULL,0);
        如果(!RETI){
                看跌期权(匹配);
        }
        否则,如果(RETI == REG_NOMATCH){
                看跌期权(不匹配);
        }
        其他{
                regerror(RETI,和放大器;正则表达式,msgbuf,sizeof的(msgbuf));
                fprintf中(标准错误,正则表达式匹配失败:%S \\ n,msgbuf);
        }
/ *免费定期编制前pression如果要再次使用regex_t * /
    regfree(安培;正则表达式);        返回0;
}


  1. 我得到的错误未知的转义序列'\\ D'。

什么是错在这里吗?这是去验证用户输入的时间的最好方法?
编辑:
试图^(:(([01] \\\\开发| 2 [0-3]):?????)([0-5] \\\\ D))?( [0-5] \\\\ D)$,我也得到一个不匹配。
另外随着


解决方案

您可以尝试 strptime(),例如:

 结构TM吨;
焦磷;P = strptime(inputStr,%H:%M:%S,& T公司);如果(P == NULL || * P!='\\ 0'){
    中止();
}

Related to Regex pattern for HH:MM:SS time string I am trying to validate user time input.

int main(int argc, char *argv[]){
        regex_t regex;
        int reti;
        char msgbuf[100];
        char inputStr2[100]="12:34:04";
        char inputStr[100]="12:34";

/* Compile regular expression */
        reti = regcomp(&regex, "^((([01]?[0-9]|2[0-3]):)?([0-5]?[0-9]):)?([0-5]?[0-9])$", 0);
        if( reti ){
        fprintf(stderr, "Could not compile regex\n");
        }

/* Execute regular expression */
           printf("%s is the string\n",inputStr);
        reti = regexec(&regex, inputStr, 0, NULL, 0);
        if( !reti ){
                puts("Match");
        }
        else if( reti == REG_NOMATCH ){
                puts("No match");
        }
        else{
                regerror(reti, &regex, msgbuf, sizeof(msgbuf));
                fprintf(stderr, "Regex match failed: %s\n", msgbuf);
        }
         printf("%s is the string\n",inputStr2);
        reti = regexec(&regex, inputStr2, 0, NULL, 0);
        if( !reti ){
                puts("Match");
        }
        else if( reti == REG_NOMATCH ){
                puts("No match");
        }
        else{
                regerror(reti, &regex, msgbuf, sizeof(msgbuf));
                fprintf(stderr, "Regex match failed: %s\n", msgbuf);
        }
/* Free compiled regular expression if you want to use the regex_t again */
    regfree(&regex);

        return 0;
}

  1. i get the error unknown escape sequence '\d'.

whats wrong here? Is this the best way to go about validating user time input?. Edit: Tried with "^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$" and i get a no match. Also with

解决方案

You could try strptime(), for example

struct tm t;
char p;

p = strptime(inputStr, "%H:%M:%S", &t);

if (p == NULL || *p != '\0') {
    abort();
}

这篇关于çPOSIX正则表达式来验证输入HH:MM:SS时间字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆