çPOSIX正则表达式来验证输入HH:MM:SS时间字符串 [英] c posix regex to validate input HH:MM:SS time string
本文介绍了çPOSIX正则表达式来验证输入HH:MM:SS时间字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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;
}
- 我得到的错误未知的转义序列'\\ 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(®ex, "^((([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(®ex, inputStr, 0, NULL, 0);
if( !reti ){
puts("Match");
}
else if( reti == REG_NOMATCH ){
puts("No match");
}
else{
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
fprintf(stderr, "Regex match failed: %s\n", msgbuf);
}
printf("%s is the string\n",inputStr2);
reti = regexec(®ex, inputStr2, 0, NULL, 0);
if( !reti ){
puts("Match");
}
else if( reti == REG_NOMATCH ){
puts("No match");
}
else{
regerror(reti, ®ex, 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(®ex);
return 0;
}
- 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屋!
查看全文