質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

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

Q&A

解決済

3回答

1625閲覧

JavaScript 変数内の文字列の日本語、ローマ字の文字数を調べたいです

akatsuka1794

総合スコア6

JavaScript

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

0グッド

0クリップ

投稿2021/11/09 08:15

変数内の文字列の日本語、ローマ字の文字数を調べたいです
日本語として扱うのはひらがな、全角カタカナ、半角カタカナ、漢字です
ローマ字として扱うのは大文字、小文字、数字、スペース、記号など

下記のように書いてみましたが動きません
下記の正常な結果は日本語は15字 ローマ字は17字
どなたか教えていただけないでしょうか

<script> window.onload=function(){ str="あいうえおaiueoアイウエオAIUEO12345_ 亜伊宇江男"; if(str.match(/(([ァ-ヶー])))){ n=str.match(/(([ァ-ヶー]))); nn=n.length; } if(str.match(/(([a-zA-Z]))))){ a=str.match(/(([a-zA-Z]))); aa=a.legth; } if(str.match(/(([\u4e00-\u9fcf])))){ k=str.match(/(([\u4e00-\u9fcf]))); kk=kk.length; nn=nn+kk; } alert("日本語は"+nn+"字 ローマ字は"+aa+"字"); } </script>

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

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

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

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

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

guest

回答3

0

ベストアンサー

javascript

1const str="あいうえおaiueoアイウエオAIUEO12345_ 亜伊宇江男"; 2const nn=str.match(/[\u30a0-\u30ff\u3040-\u309f\u3005-\u3006\u30e0-\u9fcf]/g)?.length||0; 3const aa=str.match(/[a-z]/ig)?.length||0; 4console.log(`日本語は${nn}字 ローマ字は${aa}`);

※すみません、書き方古かったので修正

投稿2021/11/09 09:14

編集2021/11/09 09:23
yambejp

総合スコア116724

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

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

akatsuka1794

2021/11/09 10:10

こんなスマートにできると思ってませんでした もしstrにURLが含まれていた場合そのURLのローマ字はカウントしない、場合どうしたらいいでしょうか?
yambejp

2021/11/10 00:09

> もしstrにURLが含まれていた場合 実例をあげてください、対応できるかもしれません
akatsuka1794

2021/11/10 23:36

正規表現でURLの部分は削除してカウントすることにしました どうもありがとうございました
guest

0

とりあえずひらがな、(全角半角)カタカナの判定です。

\uに続けてUNICODEを指定できますので、

Unicode一覧 0000-0FFF を参照して必要な文字や文字範囲を指定してください。

正規表現についてはこちら 正規表現 - JavaScript | MDN が参考になるかと思います。

js

1"あいうえおaiueoアイウエオAIUEO12345_ 亜伊宇江男".match(/[\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fd\u30ff\uff66-\uff9d]/g).length

投稿2021/11/09 08:39

KAOsaka

総合スコア531

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

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

akatsuka1794

2021/11/09 10:11

勉強させていただきます
guest

0

このようなコードを見つけましたが、、正規表現でやろうとしたこと自体間違いだったでしょうか・・・

var isJapanese = false; //日本語(英語以外)の場合「true」に設定 for(var i=0; i < title.length; i++){ if(title.charCodeAt(i) >= 256) { isJapanese = true; break; } } //表示する文字数の調整 if(isJapanese) { //日本語(英語以外)の場合 if(title.length > 20) { title = title.substr(0,10) + '~'; } } else { //英語の場合 if(title.length > 32) { title = title.substr(0,28) + '...'; } }

投稿2021/11/09 08:25

akatsuka1794

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問