如何过滤字符串,以便只允许字母数字字符通过



我目前正在为服务器编写日志解析脚本,为了防止用户输入恶意命令,我需要从输入的字符串中过滤掉除字母数字字符(同时允许下划线)以外的所有字符,尽管不幸的是我不知道该怎么做,所以我只是想知道是否有人可以告诉我/告诉我该怎么做才能实现这一目标, 谢谢!同样作为一个例子,假设有人输入以下内容:stack#@_over%flow,然后程序将过滤掉非字母数字字符(下划线除外)以产生stack_overflow,相当于 bash 中的这个

tr -dc [:alnum:]'_'

也忘了提到我已经尝试了以下内容,但仍然遇到一些问题(例如,如果字符串中包含"!",我得到"-bash:!":找不到事件"

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char ** argv) {
    int i;
    char *p;
    if (argc > 1) {
        for (p = argv[1]; *p != ''; p++) {
           if (islower(*p) || isdigit(*p) || *p == '_') {
               putchar (*p);
           }
        }
        putchar ('n');
    }
    return 0;
}

找到你正在处理的字符串的长度,分配一个该长度的新字符串,迭代输入字符串的每个字符,如果是字母数字(使用 ctype.h 中的 isalnum() )将字符放在结果字符串中,否则跳过它。 Null 终止并将结果字符串复制到输入字符串,释放分配的字符串并返回结果。

则表达式(regex)是一个很好的方法。下面是一个示例来说明这一点。

最新更新