我现在正在编写Email Validator,我想检查字符串是否包含任何符号(不是数字或字符),除了' - ',' _' ,'。',' @'。如果它不包含,我必须提出名为" counter"。
的变量这是我到目前为止所尝试的:
for (int i = 0; i < mail.length(); i++) {
if ((mail[i] >= 'A' && mail[i] <= 'Z') || (mail[i] >= 'a' && mail[i] <= 'z') || (mail[i] >= '0' && mail[i] <= '9') || (mail[i] == '.' || mail[i] == '-') || (mail[i] == '@' || mail[i] == '_')) {
if(i == mail.length()) {
counter+=1;
break;
}
}
}
答案 0 :(得分:3)
您只需检查您的套装中是否有符号:
size_t pos = mail.find_first_not_of( "-_.@" );
if( pos != std::string::npos )
++counter;
如果整个字符串中没有任何符号来自该集合,则此代码会增加计数器一次,即它是基于问题描述而不是您的代码,它会尝试计算不是来自该集合的符号数。
答案 1 :(得分:0)
您可以使用boost来使用正则表达式。如果我正确理解了您的问题,您需要检查不包含字母,数字和“-_。@”的字符串。示例实现如下所示。根据您的需求调整代码:
// std
#include <iostream>
using namespace std;
// boost
#include <boost/regex.hpp>
int main () {
unsigned int counter = 0;
// ... my code ...
string myString = "foo%1@.com";
boost::regex myRegex("[^a-zA-Z_.@-]+");
if (boost::regex_search(myString, myRegex)) {
counter++;
}
// ... my code ...
return 0;
}
<强>更新强>
为了编译代码,您需要安装boost库。您无需全部安装。只需确保安装libboost-regex
即可。对于编译,您可以使用以下命令链接必要的boost库:
g++ -o main main.cpp -lboost_regex