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一个或者多个,\+表示+,而要有\,必须要多加一个\将后一个\转义为正真的\
有不当之处,还望各位大佬指出!
商洛电子信息科技
商洛项目动态、发展与规划、企业投资、招商动态、交通建设、拆迁信息、招聘与公益
Official Account