[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/