ユーザーがメール形式の文字列を入力したかどうかを確認するにはどうすればよいですか?
例えばTed@Ted.com
「@」と「。」があるか確認したいのですが。
ispunct関数を使用する以外
ユーザーがメール形式の文字列を入力したかどうかを確認するにはどうすればよいですか?
例えばTed@Ted.com
「@」と「。」があるか確認したいのですが。
ispunct関数を使用する以外
使用できますstd::string::find_first_of
。
// Check that the string contains at least one '@' and a '.'
// after it. This will have lots of false negatives (but no
// false negative), like "a@b@c.com" or "toto@com.".
bool is_email(std::string const& address) {
size_t at_index = address.find_first_of('@', 0);
return at_index != std::string::npos
&& address.find_first_of('.', at_index) != std::string::npos;
}
ただし、電子メール アドレスの解析に関する通常の免責事項: これは非常に複雑なトピックです。有効な電子メール アドレスは奇妙な獣だからです。有効なアドレスの仕様については、RFC 5322を確認してください。
正規表現を使用して、に対して評価できます
^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$
これは、ほぼすべての正規の電子メール アドレスに一致します。この質問を参照してください
C++11 を使用している場合は を使用できますstd::regex
。それ以外の場合は、次のようなサードパーティの正規表現パーサーを使用する必要があります。boost::regex