🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

4945閲覧

[JavaScript]全角、半角での文字数制限

saider_san

総合スコア14

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/12/06 02:15

編集2020/12/06 02:49

分からないこと

以下のように半角だとmaxlengthが3になるよう制限が入れてあります。

<input type="text" v-model="hogehoge" maxlength="3">

現在の実装ですと、

  • 半角のみの場合、フロント側から綺麗に見える OK
  • 全角+半角の場合、フロント側から綺麗に見える ok
  • 全角のみの場合、フロント側から綺麗に見えない(1文字ズレてしまう)

フロント側で綺麗に見えるのは全角のみの場合は2文字となりますので
全角のみの場合だとmaxlength=3ではなく2としたいです。

こちらの制限方法で詰まっております。

やりたいこと

全角のみの場合は最大2文字と制限したい

現在までに試してみたこと

  • 制限の前にcountができるのか試してみました
textLength(t){ var textLength = 0; for(var i=0;i<t.length;i++){ var chr = t.charCodeAt(i); if((chr >= 0x00 && chr < 0x81) || (chr === 0xf8f0) || (chr >= 0xff61 && chr < 0xffa0) || (chr >= 0xf8f1 && chr < 0xf8f4)){ //半角文字 textLength += 1; }else{ //それ以外の文字 textLength += 1.5; } } return textLength; }, // 実行するとこんな感じです var t = "aあ" console.log(this.textLength(t)) => 2.5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2020/12/06 02:23 編集

> しかし、全角だと、上記の制限は聞いておらず、何文字でも入力が可能な状態です。 再現しません。 全角も3文字制限になっています。 https://jsfiddle.net/h25pL3fy/
saider_san

2020/12/06 02:36

文面に記載の情報が誤っておりました。 ご指摘ありがとうございます。 修正致しました。
think49

2020/12/06 02:39

> ・全角のみだと最大2文字制限としたい(console.log('ああ')) > ・半角全角が合わさっている場合は最大3文字制限(console.log('あaa')) 後者の条件は 'ああa' を許可しているように読めますが、前者と矛盾します。 後者は「半角2文字 + 全角1文字」なのでは?
saider_san

2020/12/06 02:45

すみません、投稿した後に気付いたのですが そもそも半角全角の場合は3文字の制限が効いているので ('aああ','あaa'共に) 知りたいこととして、全角のみの場合には2文字制限としたい が正しいですね。 こちらの文面が誤っています。 度々失礼いたしました。 修正させていただきます。
guest

回答1

0

自己解決

入力段階では'ああa'の可能性があるので
保存段階で全て全角であれば最後の文字をカットする方式にしました。
ご覧いただいた方々、ありがとうございました。
解決とさせていただきます。

投稿2020/12/06 02:52

saider_san

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2020/12/06 03:18

patern属性を想定していました。 <input type="text" pattern="[\u0000-\u00FF]{1,3}|[^\u0000-\u00FF]{1,2}|[\u0000-\u00FF]{0,2}[^\u0000-\u00FF][\u0000-\u00FF]{0,2}" maxlength="3">
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問