数値フィールドに
・全角数字が入力された場合は正規表現を用いて半角に変換して、フィールドコードを置換え
・文字列が入力された場合は、メッセージを表示して保存をキャンセル
したいと思っています。
正規表現の部分は意図したとおりに処理されますが、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;
}
})
})();
ありがとうございました。
system
(system)
クローズされました:
7
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。