通过Regex C验证输入

时间:2015-02-25 00:58:52

标签: c regex validation

我正在编写一个从用户读取文件名的程序。在处理输入之前,我想检查文件名是否有效。

我写了一个函数,但它返回的一切都是正确的。我用grep测试了正则表达式,并且它有效,但它不能用于C.可以有人指出我做错了什么。

有效文件名:file.txt file123.txt file_123.txt f123.ext f-123.txt

无效的文件名:123.txt /var/somefile.txt文件$ .txt ...

功能

int *validateString(char *argv){

    int *result = malloc(sizeof(int));

    *result = 0;

    int comp;
    regex_t validRegex;


    comp = regcomp(&validRegex,"^[a-zA-Z][a-zA-Z0-9_-]*.[a-z]+", REG_EXTENDED | REG_NOSUB);
/*
    if(comp){
        *result = 0;
        return result;
    }
*/
    if(!regexec(&validRegex, argv, 0, 0, 0)){
        *result = 1;
    }

    return result;

}

测试代码

#include<stdio.h>
#include<stdlib.h>
#include<regex.h>





int *validateString(char *argv);

int main(int argc, char *argv[]){


    if(!validateString(argv[1])){

        printf("you have entered a wrong regex!\n");
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

正如user58697指出的那样,问题是if语句总是被评估为true,因为我正在评估指针(而不是返回值!)。我按照建议取消引用它并且它有效。另一个解决方案是在函数validateString中返回一个值而不是一个指针。