C语言实现电子邮件地址验证程序

 更新时间:2022年06月15日 10:26:14   投稿:lijiao  
这篇文章主要介绍了C语言实现电子邮件地址验证程序,利用的是POSIX正则表达式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

我们最经常遇到的验证,就是电子邮件地址验证。网站上常见。各种网页脚本也都常用“正则表达式”(regular expression)对我们输入的电子邮件地址进行验证,判断是否合法。有的还能分解出用户名和域名。现在用C语言实现一下电子邮件地址验证程序,用的是POSIX正则表达式。由于用的是POSIX正则表达式,所以只能用gcc编译。
另外,据测试,只有Linux原版的gcc才能编译通过。如果用Windows中的MinGW或Cygwin的gcc编译不通过,错误是找不到<regex.h>头文件。

C语言源代码如下:

/*
 * regex.c - 用正则表达式验证电子邮件地址
 *
 *  POSIX正则表达式
 *
 *
 * 编译命令:
 *  gcc regex.c -o regex -Wall
 *
 *
 *  Copyright 叶剑飞 2012
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <regex.h> /* regular expression 正则表达式 */

#define MAX_LENGTH 1000

int main (void)
{
 size_t char_num;
 char email_address[MAX_LENGTH];
 char user_name[MAX_LENGTH];
 char domain_name[MAX_LENGTH];

 regmatch_t pmatch[4];
 regex_t match_regex;

 regcomp( &match_regex,
  "([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)",
  REG_EXTENDED );

 while ( scanf( "%s", email_address ) != EOF )
 {
 if ( regexec( &match_regex, email_address, 4, pmatch, 0 ) == 0 )
 {
  char_num = pmatch[1].rm_eo - pmatch[1].rm_so;
  strncpy( user_name, &(email_address[pmatch[1].rm_so]), char_num );
  user_name[char_num] = '\0';

  char_num = pmatch[2].rm_eo - pmatch[2].rm_so;
  strncpy( domain_name, &(email_address[pmatch[2].rm_so]), char_num );
  domain_name[char_num] = '\0';

  puts( "您输入的电子邮件地址合法" );
  printf ( "用户名:%s\n", user_name );
  printf ( "域名:%s\n\n", domain_name );
 }
 else
  puts( "您输入的电子邮件地址不合法\n\n" );
 }

 regfree( &match_regex );
 return EXIT_SUCCESS;
}

之前文章中介绍了许多邮箱验证正则表达式的方法,js正则表达式验证邮件地址php邮箱地址正则表达式验证,本文是C语言实现电子邮件地址验证,希望大家结合相关文章进行学习,从中得到收获。

您可能感兴趣的文章:

相关文章

  • 基于C语言自制华容道游戏的示例代码

    基于C语言自制华容道游戏的示例代码

    这篇文章主要为大家详细介绍了如何利用C语言自制华容道游戏,文中的示例代码讲解详细,对我们学习C语言有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-03-03
  • 关于UDP服务器客户端编程流程介绍

    关于UDP服务器客户端编程流程介绍

    大家好,本篇文章主要讲的是关于UDP服务器客户端编程流程介绍,感兴趣的同学赶快来看看吧,对你有帮助的话记得收藏
    2021-12-12
  • C++简单又好用的基本运算符重载

    C++简单又好用的基本运算符重载

    继友元知识过后,就到了今天的C++运算符重载的内容了,运算符重载是C++里比较重要的内容。这篇博文不会一下子讲完各种运算符重载,因为太多了了也不好吸收掌握,所以运算符重载我准备分多次记录和分享,那么接下来进入正文
    2022-06-06
  • opencv如何识别图片上带颜色的圆

    opencv如何识别图片上带颜色的圆

    这篇文章主要为大家详细介绍了opencv如何识别图片上带颜色的圆,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Cocos2d-x触摸事件实例

    Cocos2d-x触摸事件实例

    这篇文章主要介绍了Cocos2d-x触摸事件实例,本文代码中包含大量注释来说明Cocos2d-x中的触摸事件使用示例,需要的朋友可以参考下
    2014-09-09
  • C中qsort快速排序使用实例

    C中qsort快速排序使用实例

    在学习C++ STL的sort函数,发现C中也存在一个qsort快速排序,要好好学习下C的库函数啊
    2014-01-01
  • C++回溯算法中的全排列问题分析探讨

    C++回溯算法中的全排列问题分析探讨

    递归中遇到一个问题全排列的问题,我看见回溯特别神奇,特此记录一下。对比一下深度优先搜索与广度优先搜索,个人感觉这里的回溯像是一种递归树中的深度优先搜索的算法,他不断构造往下延伸的深度,使其达到完全编列
    2023-03-03
  • C++实现inline hook的原理及应用实例

    C++实现inline hook的原理及应用实例

    这篇文章主要介绍了C++实现inline hook的原理及应用,需要的朋友可以参考下
    2014-08-08
  • C++实现查找中位数的O(N)算法和Kmin算法

    C++实现查找中位数的O(N)算法和Kmin算法

    这篇文章主要介绍了C++实现查找中位数的O(N)算法和Kmin算法,对于C++程序算法设计有一定的借鉴价值,需要的朋友可以参考下
    2014-09-09
  • C语言 完整游戏项目推箱子详细代码

    C语言 完整游戏项目推箱子详细代码

    经典的推箱子是一个的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务
    2021-11-11

最新评论