2016-01-20 71 views
4

我想剥离字符串中的任何非字母数字字符。我现在正在使用以下功能,但它肯定不适用于多种语言。有没有i18n友好的做法?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; 
} 

回答

4

您可以使用擦除remove惯用法与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

+0

感谢您的输入。我试过朝鲜语 - std :: wstring token = L“1k2..dkfjls한ie ie =글= _ = ki38。;; 12_93” - 我不确定它是否有效。它吐出“1k2dkfjlsieki381293” – zoolook

+1

@zoolook哪些语言环境是这样的?请注意,您可以使用['std :: isalnum(std :: locale)'](http://en.cppreference.com/w/cpp/locale/isalnum),您可以在其中设置语言环境。 – 101010

+0

我尝试http://ideone.com/nZj5gE,但没有成功。我错过了什么? – zoolook