c

리눅스 정규식을 이용한 IP / Email 주소 체크

afewgood 2022. 9. 6. 10:00

#include <regex.h>
int Check_IP_Addr(char *addr)
{
    regex_t state;
    const char *pattern="^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";

    regcomp(&state, pattern, REG_EXTENDED);
    //0=success else=fail
    return regexec(&state, addr, 0, NULL, 0);
}

int Check_Email_Addr(char *addr)
{
    regex_t state;
    const char *pattern="^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$";

    regcomp(&state, pattern, REG_EXTENDED);
    //0=success else=fail
    return regexec(&state, addr, 0, NULL, 0);
}

int main(void)
{
    int i, ret;
    char *ip[]={"192.168.0.24", "192.168.0.753", "192.168.0.1"};
    char *email[]={"afewgood@afewgood.net", "example@test.com", "nonmail"};

    for(i=0; i<3; i++)
    {
        ret = Check_IP_Addr(ip[i]);
        if(ret != 0)    printf("[%d] Incorrect IP address\n", i);

        ret = Check_Email_Addr(email[i]);
        if(ret != 0)    printf("[%d] Incorrect Email Address\n", i);
    }
}

결과
[1] Incorrect IP address
[2] Incorrect Email Address