[英]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.