[英]Validation of data entered by the user in c
我有问题。 用户键入命令,该命令存储在 cmd 变量中。 命令中的前四个字符是不变的。 我检索从第四个开始的所有字符。 检索到的字符被传递给变量检查。
这是最大的问题出现的地方。 我想这样做,以便程序检查有效的字符串。 唯一有效的字符串是 |3| 但是可以有很多这样的字符串,例如 |4|30| 或 |15|1|100| 等等直到无穷大。 最重要的是两个之间的用户 | 字符只能输入十进制格式的数字。
我创建了一个正则表达式,但它不起作用,因为即使是没有 | 的十进制数字符给出了积极的结果。 要获得积极的结果,必须有两个 | 字符和它们之间的十进制数。 我怎样才能使程序正常工作?
#include "stdarg.h"
#include "string.h"
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <regex.h>
int main()
{
char cmd[] = "WBRA|5|80|120|3|40|";
int length = strlen(cmd);
char check[100];
int index = 0;
for(int i=4; i<length; i++){
check[index++] = cmd[i];
}
printf("%s\n\r", check);
regex_t regex;
int return_value;
return_value = regcomp(®ex,"(\\|\\d*\\|){n}",0);
return_value = regexec(®ex, "check", 0, NULL, 0);
printf("Result %d\n\r", return_value); // 0 is correct
}
您需要将代码中的两行更改为
return_value = regcomp(®ex,"^\\|([0-9]+\\|)+$",REG_EXTENDED);
return_value = regexec(®ex, check, 0, NULL, 0);
请参阅C 演示。
详情:
^\|([0-9]+\|)+$
匹配以|
开头的整个字符串 char 然后包含一个或多个出现的一个或多个数字和一个|
字符直到结束REG_EXTENDED
才能正常工作regexec
命令中使用了"check"
而不是check
(因此您是根据check
字而不是|5|80|120|3|40|
字符串检查正则表达式)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.