hanbingfengying
Ben179261480
采纳率100%
2015-01-09 06:27

手机号码校验 正则表达式匹配有问题 C++11可以通过 android下匹配失败 SOS!

bool StringUtil::StringVerification(std::string src, std::string regular)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)

regex pattern(regular.c_str());

if ( !regex_match( src, pattern ) )

{
return false;
}
return true;
#endif

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID||CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

regex_t reg;
int retval = regcomp(&reg, regular.c_str(), REG_EXTENDED | REG_NEWLINE);

retval = regexec(&reg, src.c_str(), 0, NULL, 0);
CCLOG("%s is %s\n", regular.c_str(), retval == 0 ? "legal" : "illegal");
regfree(&reg);

if (retval == 0) {
    return true;
}
else
{
    return false;
}

#endif
}

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

跪求高手解答,为什么C语言的通不过呢???

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

7条回答

  • q107770540 兔子党-督察 6年前

    try:

    ^1[0-9]{10}$

    点赞 评论 复制链接分享
  • hanbingfengying Ben179261480 6年前
    点赞 评论 复制链接分享
  • hanbingfengying Ben179261480 6年前

    厉害!!确实是转义字符的问题 但是我不知道怎么改
    ^[a-zA-Z0-9~!@#$%^&*()_+`\-={}\[\]:\";'<>?,.\/]{%d,%d}$
    这种的就有点蛋疼了

    点赞 评论 复制链接分享
  • hanbingfengying Ben179261480 6年前

    C语言跟c++转义是一样的啊。。这个没有什么问题。。

    点赞 评论 复制链接分享
  • oyljerry oyljerry 6年前

    ^1\d{10}$

    主要是不同语法下的转义字符等

    点赞 评论 复制链接分享
  • u011210708 菜菜1357 4年前

    打错了,改成 "^1\d{10}$" 应该就行了

    点赞 评论 复制链接分享
  • u011210708 菜菜1357 4年前

    "^1\d{10}$"这个 改成 "^1\d{10}$" 应该就行了

    点赞 评论 复制链接分享

相关推荐