簡體   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