数値フィールドに文字列が入力された場合のSwitch文について

数値フィールドに
・全角数字が入力された場合は正規表現を用いて半角に変換して、フィールドコードを置換え
・文字列が入力された場合は、メッセージを表示して保存をキャンセル
したいと思っています。

正規表現の部分は意図したとおりに処理されますが、Switch文での判定がされません。
どのように修正すればいいのか、ご教授ください。
よろしくお願いいたします。

//レコード保存時のチェック
(() => {
'use strict';
kintone.events.on([
  'app.record.create.submit',
  'app.record.edit.submit'],(eve) => {

    const record = eve.record;
  record.receipts_1.value.forEach((row) => {
    let bkcnt=row.value.BookCount.value;      //数


      switch(replaceFullToHalf(bkcnt).value){
      case false:
        break;

        case true:
        row.value.BookCount.value = bkcnt;
    }
  });

  return eve;
});
})();

正規表現での置き換え

function replaceFullToHalf(str){

//文字列の場合は、メッセージを表示して終了
if(!str.match(/^[0-90-9\s]*$/)){
  alert('『●●』、『◇◇』、『△△』は、 数字を入力してください');
  return;
}

  alert('全角数字を半角に変換します');
return str.replace(/[0-9]/g,function(s){
//return String.fromCharCode(s.charCodeAt(0)-65248); //10進数
return String.fromCharCode(s.charCodeAt(0)-0xFEE0);  //16進数
});
};

 

 switch(replaceFullToHalf(bkcnt).value){

は、true / false を期待しているようですが、( .valueは不要?)

replaceFullToHalf()の返り値は true / falseではなく 半角の数字などが帰ってくるようです。

そのあたりの整合性がとれていないようです。

 

数値フィールドに数字以外の全角文字をいれて保存しようとするとエラーになるのでJavaScriptで対応が必要なのでしょうか?

harada様

返信が遅くなりました。
ありがとうございます。

replaceFullToHalf()の戻り値が true/false でないこと、確認不足でした。
また、Switch文では、caseに範囲が指定できないので、if文にしました。

数値フィールドに半角数字以外を入力すると、ご指摘の通りエラーは表示されますが
**(全角)**数字を入力しているのに、なぜ?
となりユーザーからの質問を受けました。
ラベルで注意事項を入れることやドロップダウンで0~10を選択する方法も考えましたが、大きい数字だと現実的でないため
勉強もかねて正規表現での自動変換を実装しました。

さすがに数字以外を入れる人はいないと思いますが、これも勉強のため文字列を入力した場合はメッセージを表示させてみたくなりました。

お忙しい中、ご回答をいただきありがとうございました。

質問時のコードに、半角・全角数字以外が混じっていたら(\sの空白文字があるのが気になりましたが)

 //文字列の場合は、メッセージを表示して終了
if(!str.match(/^[0-90-9\s]\*$/)){
  alert('『●●』、『◇◇』、『△△』は、 数字を入力してください');
 return;
}

returnされていたいました。

全角の数字を半角に直すカスタマイズが便利だと思いました。

数字以外を入れたときにJavaScriptのカスタマイズしてエラーを出しても、出さなくてもどちらにせよkintone側がエラーを出すので考える必要はないかと思いました。エラー画面の例として「日本語」と入れました。勉強の意図で追加されているとのことで納得しました。

状況によって変わるかもしれませんが、数字にできない文字を消してkintoneに登録するなら判定部分は役立つかもしれません。

harada様

正規表現の『\s』これは、不要ですね。ありがとうございます。

>質問時のコードに、半角・全角数字以外が混じっていたら
この考えがなかったので、テストさせていただきました。

>全角の数字を半角に直すカスタマイズが便利だと思いました。
ありがとうございます。

文字列の判定部分は無駄かもしれませんが、とりあえず残したままにしました。
コードは、以下のように変更しました。

(() => {
  'use strict';

kintone.events.on([
  'app.record.create.submit',
  'app.record.edit.submit'],(eve) => {

      const record = eve.record;
    try{
      record.receipts_1.value.forEach((row) => {  

        let bkcnt=row.value.BookCount.value;      //数
        if (!isNaN(replaceFullToHalf(bkcnt))){
          row.value.BookCount.value = replaceFullToHalf(bkcnt);
        }
        else{
          throw err;
          }
      });      
        return eve;
      }

    catch(err){
      console.error(err);
      eve.error = `エラーが発生したため保存を中断します。`;
      return eve;
    }
  })
    })();

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

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。