【发布时间】:2012-02-24 09:47:00
【问题描述】:
与Regex pattern for HH:MM:SS time string相关 我正在尝试验证用户时间输入。
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;
}
- 我收到错误未知转义序列“\d”。
这里有什么问题吗?这是验证用户时间输入的最佳方式吗?
编辑:
尝试使用"^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$",我得到了不匹配的结果。
还有
【问题讨论】:
-
这不处理
24:00:00(midnight at the end of the day) 或23:59:60(leap second) 的情况。这是假设您只想支持精确到秒精度的时间。 -
@MichaelKjörling 那你会怎么做呢?
-
@J.F.Sebastian 很简单。但是你认为上面涉及到 regexec 的使用有什么问题?
-
您的正则表达式(在编辑后的帖子中)不再包含
\d,所以我猜您发布的错误消息不是您当前收到的实际错误消息。你能告诉我们真正的问题吗?
标签: c regex validation time posix