vlambda博客
学习文章列表

C++正则表达式之电话号判断应用


之前转发有一篇的博客,介绍了正则表达式的基础知识,本次就正则表达式在实际开发中的使用举例说明。

正则表达式之前接触过,但是就是总是记不得使用,不到真正的项目开发,不知道使用,更别提面试。当时面试的时候笔试题好多都是处理字符串,其中就有很多可以用正则表达式解决但都想达不到(用它),沙雕似的自己通过多层判断,还急忙搞不出来...........

函数说明

 手机号:

  号码前面可加“+86”  如:+8613839326645

bool CheckNumber(const std::string & number){ std::string temp_num = number; temp_num.erase(0, temp_num.find_first_not_of(" ")); int iLast = temp_num.find_last_not_of(" "); temp_num.erase(temp_num.find_last_not_of(" ") + 1);
std::regex regexNum("(^(0\\d{2,3}-?\\d{7,8})$)|(^(\\d{7,8})$)|(^(1\\d{10})$)|(^((\\+?86)|(\\+86))? ?1\\d{10}$)");
bool m_retMatch = std::regex_match(temp_num, regexNum);
if (!m_retMatch) { //电话号非法--------- return false; } //电话号位数等有效-------- return true;}

在上述程序中,实现了trim函数,即去掉字符串前后的空格。

void trim(string temp_num,string & final){  temp_num.erase(0, temp_num.find_first_not_of(" "));  temp_num.erase(temp_num.find_last_not_of(" ") + 1);  final = temp_num;}

调用string类的find_first_not_of(" ")成员函数,去除传入字符串前部所有空格,再去掉传入后所有字符串后面的空格。

正则表达式解释:

^开始,$结束,()分组,|或操作,?表示?前面的字符出现一次或者0次

\d{8}表示8个数字字符,\d{7,13},表示7-13个数字字符

这些都比较简单

但有一个细节:

(\\+86))? ?1\\d{10}$)

+86中的”+“需要使用双斜杠,+表示0一个或者多个,\+表示+,而要有\,必须要多加一个\将后一个\转义为正真的\


有不当之处,还望各位大佬指出!

商洛电子信息科技
商洛项目动态、发展与规划、企业投资、招商动态、交通建设、拆迁信息、招聘与公益
371篇原创内容
Official Account