見出し画像

discord+googleフォームで「価格」対応

前提



依頼



問い合わせに「価格」がはいるとのこと。

「カンマは入っても入らなくてもOKにして。
 でもdiscordに連携するときはカンマありにして。

 円とか¥は、さすがに入力NGでいいよ」

JOHSHI


オーケー、対応しようじゃないか

入力を制御

まずはグーグルフォーム。

「カンマがあってもOKとする」ので、既存の「整数」チェックは使えない。

ということで、独自正規表現…なんだけど。
「カンマがあってもOK」ということは「カンマがなくてもOK」な正規表現なんだけど…そんな都合のいい表記ある?

https://qiita.com/aki4003/items/d9787cbb3c392fe2aeb3

あった…!!!!
と思ったけど、これは「3桁区切り」とかはダメだったorz

ということで、あれこれ探したり chat-gptに相談したりで、以下の正規表現になりました。


正規表現で、「価格」となっているかチェック

^[1-9][0-9]{0,2}(,?[0-9]{3})*$
  • 数字もしくは,のみを入力できる。

  • ただし、先頭に0は入力できない。

  • 全体の桁数は、3桁以上とする。

  • なお、「,」は、末尾から3桁ごとの位置にのみ挿入できる

  • 「,」はあってもなくてもいい

出力を制御

つづいてGAS。
GASで整形しているところに、こんなコマンドかませればいいっしょ

function addComma(str) {

  // 数値だけを抜き出して結合
  var num = str.match(/\d+/g).join("");

  // カンマ区切り追加
  return parseInt(num).toLocaleString();
}

…と思ったら、エラー。

[TypeError: str.match is not a function]

…おや?
すでに数値扱いになってる???
でも今後、文字列でくるかもしれないしなぁ。。。


chatgptに相談して、以下の変換を追加。

入力値をカンマ区切りにして返すメソッド

function addComma(str) {
  // 明示的に文字列に変換
  if (typeof str !== 'string'){
    str = String(str)
  }

  var num = str.match(/\d+/g).join("");
  return parseInt(num).toLocaleString();
}


結論


達成!
カンマ区切りだと見やすいよね。


カンマ有無を判断して、なければ追加する処理をどうしようかな…とか迷ってたけど、便利なメソッドがあるもんだ。


この記事が気に入ったらサポートをしてみませんか?