繁体   English   中英

验证用户在 c 中输入的数据

[英]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(&regex,"(\\|\\d*\\|){n}",0);
    return_value = regexec(&regex, "check", 0, NULL, 0);
    printf("Result %d\n\r", return_value); // 0 is correct

}

您需要将代码中的两行更改为

return_value = regcomp(&regex,"^\\|([0-9]+\\|)+$",REG_EXTENDED);
return_value = regexec(&regex, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM