首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 手機號碼正則驗證:跨平台兼容性問題與解決方案

     編輯:程式設計綜合問答

問題背景

在 C++ 專案中使用正則表達式驗證手機號碼,代碼在 Windows 平台(C++11 std::regex)運行正常,但在 Android 平台(POSIX regex.h)卻無法匹配。

原始代碼

bool StringUtil::StringVerification(std::string src, std::string regular) {
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
    std::regex pattern(regular.c_str());
    return std::regex_match(src, pattern);
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    regex_t reg;
    int retval = regcomp(®, regular.c_str(), REG_EXTENDED | REG_NEWLINE);
    retval = regexec(®, src.c_str(), 0, NULL, 0);
    regfree(®);
    return retval == 0;
#endif
}

測試用例:StringUtil::StringVerification(strPhoneNum, "^1\\d{10}$");

原因分析

Windows 上使用 C++11 std::regex 支持 \d 元字符,而 Android/iOS 使用的 POSIX 正則引擎(regex.h)不支持 \d,只識別 [0-9] 或 [[:digit:]]。

解決方案

將正則表達式修改為跨平台兼容寫法:

// 修改前
"^1\\d{10}$"
// 修改後
"^1[0-9]{10}$"

或使用 POSIX 字符類:"^1[[:digit:]]{10}$"。

最佳實踐建議

  • 跨平台項目中盡量避免使用 \d、\w 等非標準元字符。
  • 統一使用 [0-9]、[a-zA-Z0-9_] 等顯式字符類。
  • 可封裝平台無關的正則工具類,內部根據編譯宏選擇引擎。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved