我非常友好地剥离非字母数字字符

时间:2016-01-20 20:16:24

标签: c++ internationalization

我想删除字符串中的任何非字母数字字符。我现在使用以下功能,但它肯定不适用于多种语言。有一种i18n友好的方式吗?

static string StripNonAlphaNum(const string& token) {
    string s = token;
     // strip away non-alphanumeric parts using a RE expression
    RE2::GlobalReplace(&s, "[^A-Za-z0-9]", "");
    return s;
}

1 个答案:

答案 0 :(得分:4)

您可以将删除惯用法与std::isalnum谓词一起使用,如下所示:

std::string StripNonAlphaNum(std::string token) {
  token.erase(std::remove_if(token.begin(), token.end(), 
              [](char const &c){ return !std::isalnum(c); }), token.end());
  return token;
} 

Live Demo

同样可以为std::wstring实施:

std::wstring StripNonAlphaNum(std::wstring token) {
  token.erase(std::remove_if(token.begin(), token.end(),
              [](char const &c){ return !std::iswalnum(c); }), token.end());
  return token;
}

Live Demo