Engineering

掲題のとおりです。
使ってしまったのです…orz

【備忘録】 JavaScript で replace を使って replaceAll をする方法 | MSeeeeN | 大阪発 IT メディア by MSEN
replaceAll() は ES2021 で追加されたかなり新しい関数となっています

String.prototype.replaceAll() - JavaScript | MDN
Safari on iOS: 13.4 Full support

お客様のiPhoneがiOS13.3だったため、問題発生。。。
まあ、早めに問題がわかってよかった。
そしてそのお客様がとても良い人だったので救われた。
別の意味で『お客様は神様です』でした。ありがたや〜

クレジットカード情報の入力ってタイヘンですよね。
たまにしか入力しないから記憶することも難しいので、入力が必要になった時にクレジットカードを探し出して、見ながら入力しなければならず、たまたま出先だったりして『今手元にない』となったりしますよねー。
いや、私の場合は1枚のカードだけは覚えましたので、そういうことは無いんですけど。それでも入力するのは面倒です。
そんな時、一度入力すれば記憶してくれるんです、そう、Chromeならねっ!
ん?なんか違和感のある文章が生まれたぞ。まいっか。

今回の記事は、そのありがたーい自動入力機能が、意図せず動作して困った、というお話です。
百聞は一見に如かず。この画像を見てもらいたい。
スクリーンショット 2022-08-31 194725
table内にフォームパーツを入れているんだけど、1行目に<th>名前</th>として、2行目以降に<input>タグが入っている。
このinputタグが
<input type="text" id="name_1" name="name_1">
<input type="text" id="name_2" name="name_2">
...

というname属性になっている。「name="name"」が良くないのか?ッと思って
<input type="text" id="hoge_1" name="hoge_1">
<input type="text" id="hoge_2" name="hoge_2">
...

としてみるも効果なし。
タチの悪いことに、「autocomplete="off"」は無視されるらしい。実際無視されましたよ。。。
うーん、何で判断しているのか?
<th>名前</th>…まさかね。。と思いつつこれを<th>名称</th>に変更すると…
出ない!
ではこれは?<th>お名前</th>→出た。
どうやら「名前」を含む文字列ならなんでもござれらしい。
「海老名前に行ったことあるぞー」とかでも出る。
スクリーンショット 2022-08-31 180736
ちなみに、海老名は海老名SAに寄ったことがあるような気がする程度です。って、んなこた誰も聞いてない(^_^;)
しかし、「名前」があるだけでカード情報入力と判定してしまうなんて、どうしたんだグーグル様。
だってカード番号らしき入力欄も無いんだよー。どうしてカード情報と思うかなぁ…
perlreref - Perl の正規表現のリファレンス - perldoc.jp より

アンカー
すべてゼロ幅の表明です。
   ^  文字列(/m が指定されている場合には行)の先頭にマッチします
$ 文字列(/m が指定されている場合には行)の終端もしくは改行の前にマッチします
\b 単語境界(\w と ¥W の間)にマッチします
\B 単語境界以外(\w と \w の間か \W と \W の間)にマッチします
\A 文字列の先頭(/m には影響されません)にマッチします
\Z 文字列の末尾(省略可能な改行の前)にマッチします
\z 文字列の本当の末尾にマッチします
\G 前回の m//g のマッチした場所の末尾にマッチします

PHP: 新機能 - Manual (PHP 5.6.x から PHP 7.0.x への移行)

上記ページの「Null 合体演算子」の項を読んでみる。
$username = $_GET['user'] ?? 'nobody';
// 上のコードは、次のコードと同じ意味です。
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

$baz = 3;
$qux = 4;
echo $foo ?? $bar ?? $baz ?? $qux; // 出力は 3 です

めっちゃ便利やんけっ!

実はこの記事を下書き保存して半月以上経過したのだが、いまだ使用機会ナシ。
だって、例えば
$bar = false;
$baz = 3;
$qux = 4;
var_dump($foo ?? $bar ?? $baz ?? $qux); // 出力は bool(false) です

のように、falseと評価される値が入っていた場合の扱いが、希望にそぐわなかった。
こんな感じで「エラー制御演算子」と併せて「三項演算子の短縮形」を使用しましたとさ。
$bar = false;
$baz = 3;
$qux = 4;
var_dump(@$foo ?: @$bar ?: @$baz ?: @$qux); // 出力は int(3)です


「三項演算子の短縮形」には新しい名前をつけてあげなかったんだね。
まあ、『三項演算子を短縮したもの』だからねぇ。
「Null 合体演算子」のほうはそんな表現ができない、新しい演算だから、新しい名前が必要だった、ということか。


ところで、次の項にある「宇宙船演算子」って。。
「spaceship operator」の和訳なんだねー。
<=> この形が宇宙船に見えたんだろうねー。
カッコいいねー。
でも括弧じゃないねー。不等号だねー。

…なんだこの記事(-_-;)
ああ、ちょっとメモのつもりが、壮絶な蛇足を生んでしまった。。

簡潔にまとめます。

ストライプテスト環境で支払いテスト時に「ワンクリックチェックアウト」を使用したいけど、認証コードってどうするの?
という話。

結論は、おそらく適当に入力すればなんでも通る。
私の場合は全部ゼロ、000000で通りました。

これ、もしかして、適当でも良いってことは、携帯番号も適当で良かったということか。
機会があったら試してみよう。

--
さて、ここから蛇足の始まりです…。

続きを読む