1

regex.h (クロスプラットフォーム) を使用して組み込みの正規表現機能に切り替えました。また、次の単純な正規表現では、as @abc.comなどの多くの有効な入力が失敗するようになりました ( ab@abc.comは引き続き正常に動作します)。

^[^@\s]+@[^@\s]+\.[^\s\.@]+$

呼び出しコードは次のとおりです。

return Common::regexMatch("^[^@\\s]+@[^@\\s]+\\.[^\\s\\.@]+$", userInput);

そして、実装は次のとおりです。

#import "regex.h"

bool Common::regexMatch(const string& regex, const string& text) {
   //return [[NSString stringWithCString:text.c_str() encoding:NSUTF8StringEncoding] isMatchedByRegex:[NSString stringWithCString:regex.c_str() encoding:NSUTF8StringEncoding]];

   regex_t re = {0};
   if (regcomp(&re, regex.c_str(), REG_NOSUB | REG_EXTENDED | REG_ICASE) != 0)
      return false;
   int status = regexec(&re, text.c_str(), (size_t)0, NULL, 0);
   regfree(&re);
   if (status != 0)
      return false;
   return true;   
}

正規表現パターンに文字仕様がまったく含まれていないのに、別の文字に基づいて識別しているのは不可解です。そして、どの入力が気に入らないかについては非常に一貫しています。ティア。

4

1 に答える 1