[あすかぜ・ねっと]あすかぜ・ねっと自作ソフトCassava > サポート掲示板

Cassava Editor サポート掲示板

スレッド一覧に戻る返信

[687] Search関数の返り値について

Johnny [2022/06/09 18:06:39]

Search関数を使用して、正規表現との一致(メールアドレス形式であるか否か)を判定しているのですが、対象文字列の文字数により結果が変わってしまっているように思われます。この関数を利用時の制限等ございますでしょうか。

※エディタ上の検索では文字数に関係なく下記正規表現にてヒットする。

[対象文字列]
0:「test123456789@test1234567890.co.jp」34桁
-1:「test1234567890@test1234567890.co.jp」35桁

[正規表現]
^[a-zA-Z0-9_.+-]+@([a-zA-Z0-9_+-]*\.)+[a-zA-Z]{2,}$

[マクロ]
// 指定列の値がメールアドレスの形式でない場合は空欄にする

x = int(InputBox("メールアドレス形式チェックを行う[列番号]を入力してください。"));
if (x == 0) { return; }

cnt = 0;

for (y = 2; y <= Bottom; y++) {

  reg = [x,y].search("^[a-zA-Z0-9_.+-]+@([a-zA-Z0-9_+-]*\.)+[a-zA-Z]{2,}$");
  if (reg == -1) {
    [x,y] = "";
    cnt = cnt + 1;
  }
}

str = cnt + " 件を空欄に変換しました。";
MessageBox(str);

Re: [687] Search関数の返り値について

Johnny [2022/06/09 18:26:25]

正規表現を確認時の内容で記載してしまいました。
実際は下記で判定を行っています。


[正規表現]
^[a-zA-Z0-9_.+-]+@([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\.)+[a-zA-Z]{2,}$

Re: [687] Search関数の返り値について

あすかぜ [2022/06/09 22:36:57]

ご指摘ありがとうございます。
セルのデータに対して search() で検索をすると正しく動作しない場合があるようです。
近いうちに修正したいと思います。

さしあたりは、一度変数に代入することで回避できそうです。
  cell = [x,y];
  reg = cell.search("^[a-zA-Z0-9_.+-]+@([a-zA-Z0-9_+-]*\.)+[a-zA-Z]{2,}$");

また、開発版では正規表現まわりの実装を書き換えたので、試した限りでは search() も正しく動作しているようです。
もしよろしければ Ver.2.5 α2 も試してみてください。
https://www.asukaze.net/soft/cassava/history/2_5dev.html

よろしくお願いします。

Re: [687] Search関数の返り値について

Johnny [2022/06/10 09:53:38]

早速のご回答ありがとうございます。

ご教示いただいた通り、一度変数に代入することで回避できることを確認しました。

質問時に使用ソフトのバージョンの記載が漏れておりました。申し訳ございません。[Ver.2.4,2(64bit)]

また[Ver.2.5 α2]も試させてもらおうと思います。

ありがとうございました。

Re: [687] Search関数の返り値について

あすかぜ [2022/06/11 10:53:18]

修正版を Ver.2.4.3 として公開しました。
https://www.asukaze.net/soft/cassava/

スレッド一覧に戻る返信