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

我们最经常遇到的验证,就是电子邮件地址验证。网站上常见。各种网页脚本也都常用“正则表达式”(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语言实现、des加密算法c语言实现、算法 c语言实现、aes加密算法c语言实现、rsa算法c语言实现,以便于您获取更多的相关知识。

时间: 2024-09-27 19:28:34

C语言实现电子邮件地址验证程序_C 语言的相关文章

C语言+win32api写窗体应用程序_C 语言

昨晚看了一下win32api编程的知识,我在网上搜索了许多教程,一个美化版的windows编程,代码错漏百出,缺字,翻译难懂生硬,术语不专业,一个windows.c编程,模糊,而且用的是VC++6.0,由于我的电脑装不上vc++6.0,只能用vs2008,许多操作和函数都不太一样了.在网上找到一篇博客园的win32api编程的文章,照抄下来,结果编译下来几十个错误--晕死了. 后来还是参照以下四个步骤,自己查MSDN用C语言写出来了,晕死,英文不好,话说,金山词霸对MSDN的整句翻译很专业啊.

c语言10个经典小程序_C 语言

[程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 2.程序源代码: 复制代码 代码如下: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&a

java-电子邮件地址验证程序

问题描述 电子邮件地址验证程序 跪求电子邮件地址的验证程序 毕业论文题目 一点头绪都没有 完全不会写啊 跪求各位大神帮助 用JAVA写 最好详细些 加上注释 本人刚学JAVA不到三个月 小白一枚 求帮助 解决方案 String check = "^([a-z0-9A-Z]+[-|.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?.)+[a-zA-Z]{2,}$"; Pattern regex = Pattern.compile(check);

javascript邮箱地址验证程序

javascript教程邮箱地址验证程序 validateEmail() 下一步我们希望看到的电子邮件地址,如果用户输入的是真实的.这意味着输入数据 必须至少包含一个@符号和一个点(.).此外,@绝不能以电子邮件地址的第一个字 符,最后点必须至少@符号后的一个字符. 首先我们检查用户输入的所有电子邮件中的任何领域.下一步,我们使用正则表达式 和测试()方法来检查遵守的领域.同时,我们将使用trim()函数,将削减领导过 的字符串空白.这不会是完美的验证 - 有可能跌破它不符合解决 - 但通常不够

js email 电子邮箱地址验证程序

原代码是这样的:  代码如下 复制代码 function isValidMail(sText){  var reMail = /^(?:w+.?)*w+@(?:w+.?)*w+$/;  return reMail.test(sText); } 似乎 这样验证像sofish@163.com这样的邮箱是没问题的.但,由于仔细看一下在AT(@)后面的非捕获性引用中,使用的是*(出现任意次):  代码如下 复制代码 var reMail = /^(?:w+.?)*w+@(?:w+.?)*w+$/; 那么

C语言实现的一个万年历小程序_C 语言

该程序简单地输入一个年份(1901年之后的年份),随后程序输出该年份十二个月的日历. #include<stdio.h> #define Mon 1 #define Tues 2 #define Wed 3 #define Thur 4 #define Fri 5 #define Sat 6 #define Sun 0 #define January_days 31 #define February_days 28 #define March_days 31 #define April_day

VC实现获取本机MAC地址的方法_C 语言

本文实例采用vc6.0运行环境,通过实例实现获得MAC地址的功能. 完整的实例代码如下: #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <httpext.h> #include <windef.h> #include <Nb30.h> int getMAC(char * mac) { NCB ncb; typedef struct _AS

js电话 邮箱地址验证程序

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.111cn.net/ 1999/xhtml"> <head> <meta http-equiv="cont

分析C语言一个简单程序_C 语言

首先给大家一个简单的例子,让读者有个整体的认识,代码如下: #include <stdio.h> int main() { puts(""); return 0; } 函数的概念 先来看第4行代码,这行代码会在显示器上输出"".前面我们已经讲过,puts 后面要带( ),字符串也要放在( )中. 在C语言中,有的语句使用时不能带括号,有的语句必须带括号.带括号的称为函数(Function) . C语言提供了很多功能,例如输入输出.获得日期时间.文件操作等