仅列出标题 列出摘要

Python-同时匹配邮箱和电话号码的正则表达式

同时匹配邮箱和电话号码的正则表达式
要想很完美的匹配,不太简单。

各邮箱提供商的标准都多少有些许差别。如:
163:6-18个字符,可使用字母、数字、下划线,需以字母开头。 
gmail:可以使用字母、数字和英文句点,不能使用除字母 (a-z)、数字和英文句号外的其他字符,下划线也是不可以的。
yahoo:4至32个字符(包括字母、数字、下划线、单点),且必须以英文字母开头。
sina:4-16个字符,支持英文小写、数字、下划线,不支持全部为数字或下划线。
qq:由3-18个英文、数字、点、减号、下划线组成。
其他的提供商还有更多格式标准。

而对于电话号码:
国内固定电话城市区号,有三位的,也有四位的。
固定电话号码有七位的,也有八位的。
手机号码包括:
中国移动:134、135、136、137、138、139、147、150、151、152、157、158、159、182、187、188。
中国联通:130、131、132、155、156、185、186
中国电信:133,153,,180,189
如果再加上国外的号码的话,要考虑的更多。

要想都匹配并且都是有效的话,挺麻烦的,这里的匹配不能算完美,但也考略了不少的场景。
如果要写的很完美的话,我觉得要加一些逻辑判断。
比如说,对邮箱和电话号码判断是哪家提供商的。


  1. import re
  2. print 'Please input mail address:',
  3. inputmail=raw_input()
  4. """
  5. 说明:
  6. [^\._-][\w\.-]+@(?:[A-Za-z0-9]+\.)+[A-Za-z]+$匹配邮箱。
  7. 综合目前国内常用的邮箱,大概通用的规则包括:
  8. 1、[^\._],不能以下划线和句点开头。
  9. 2、[\w\.]+,包括字母、数字。而对句点及下划线各提供商有差别,对此有效性不做更严格的判断。
  10. 3、@是必须的。
  11. 4、(?:[A-Za-z0-9]+\.)+[A-Za-z]+$,@后以xxx.xxx结尾,考虑到多级域名,会有这种情况xxx.xxx.xxx如xxx@yahoo.com.cn
  12. ^0\d{2,3}\d{7,8}$|^1[358]\d{9}$|^147\d{8}$匹配电话号码。
  13. 只考虑国内的情况,大概通用的规则包括:
  14. 1、^0\d{2,3},固定电话区号3-4位数字,以0开头。
  15. 2、d{7,8}$,固定电话一般7-8位数字。
  16. 3、国内目前的手机号码都是11位数字,三大运营商的号码段基本都在上面列出来了,我们这里除了147的号码的段,其他的都只考虑前两位,
  17. 第三位就不考虑了,否则,工作量也很大。前两位包括13*、15*、18*。
  18. """
  19. p=re.compile('[^\._-][\w\.-]+@(?:[A-Za-z0-9]+\.)+[A-Za-z]+$|^0\d{2,3}\d{7,8}$|^1[358]\d{9}$|^147\d{8}
  20. )
  21. match = p.match(inputmail)
  22. if match:
  23.     print match.group()
  24. else:
  25.     print 'mail address or phone number is error!'
  26.     
  27. """
  28. 部分测试结果:
  29. 正确的邮箱地址格式:
  30. Please input mail address: biao.wu@gmail.com
  31. biao.wu@gmail.com
  32. Please input mail address: wu_biao@163.com
  33. wu_biao@163.com
  34. Please input mail address: wubiao@yahoo.com.cn
  35. wubiao@yahoo.com.cn
  36. Please input mail address: wu-biao@qq.com
  37. wu-biao@qq.com
  38. Please input mail address: 8888@qq.com
  39. 8888@qq.com
  40. 错误的邮箱地址格式:
  41. Please input mail address: .biao@163.com
  42. mail address or phone number is error!
  43. Please input mail address: _wubiao@qq.com
  44. mail address or phone number is error!
  45. Please input mail address: -qq@qq.com
  46. mail address or phone number is error!
  47. Please input mail address: biao@@.com
  48. mail address or phone number is error!
  49. Please input mail address: wubiao@qq.com.
  50. mail address or phone number is error!
  51. Please input mail address: wubiao@qq.com.22
  52. mail address or phone number is error!
  53. Please input mail address: wubiao#@163.com
  54. mail address or phone number is error!
  55. 正确的电话号码格式:
  56. Please input mail address: 13530315051
  57. 13530315051
  58. Please input mail address: 075512345678
  59. 075512345678
  60. Please input mail address: 18667676767
  61. 18667676767
  62. 错误的电话号码格式:
  63. Please input mail address: 135303154
  64. mail address or phone number is error!
  65. Please input mail address: 135303112345
  66. mail address or phone number is error!
  67. Please input mail address: 1234567890
  68. mail address or phone number is error!
  69. """
复制代码


代码贴进去,总是会自己变形,那句正则完整的是:p=re.compile('[^\._-][\w\.-]+@(?:[A-Za-z0-9]+\.)+[A-Za-z]+$|^0\d{2,3}\d{7,8}$|^1[358]\d{9}$|^147\d{8}$')

posted on 2014-05-07 14:40  baoyiluo  阅读(1819)  评论(0编辑  收藏  举报