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

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

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

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

JavaScript

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

2回答

1331閲覧

正規表現 | 〜〜のみ含むパターンと、〜〜は含んではいけないパターン (続編)

退会済みユーザー

退会済みユーザー

総合スコア0

Vue.js

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

JavaScript

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2020/02/09 16:45

編集2020/02/10 17:01

前回、質問内容に漏れがあり再現することができませんでした。
https://teratail.com/questions/239924

行いたい正規表現は以下の通りで試行錯誤しているのですが、うまくいかないので教えていただきたいです。

文字列期待値
漢字OK
カタカナOK
漢字カタカナOK
あ漢字カタカナNG
漢字あカタカナNG
漢字カタカナあNG
半角スペース期待値
漢字カタカナNG
漢字カタカナNG
漢字 カタカナOK
漢字 カタカナNG
漢字 カ タカナOK
漢字 カ タカナNG
漢字カタカナ NG
漢字カタカナ NG
全角スペース期待値
 漢字カタカナNG
  漢字カタカナNG
漢字 カタカナOK
漢字  カタカナNG
漢字 カ タカナOK
漢字  カ  タカナNG
漢字カタカナ NG
漢字カタカナ  NG

基本的な許容文字形式に加え、文字列の間にあるスペースは1つまでとしたいのです。

追記

細かいところは以下のように定めたいと思います。

要件

漢字とカタカナの入力を許容し、
全角ハイフン(長音)と全角スペースと半角スペースも許容するが
全角ハイフン(長音)と全角スペースと半角スペースについては連続で1文字までしか入力できないものとする。

漢字の取り扱い

  • ここでいう漢字とは、全角で1文字を表すものとする。
  • ㍻などのような環境依存文字は漢字と見做さない。
  • 吉野家などのようなのような文字列でも人間が見て全角で1文字を表す漢字だと判断できるものは漢字と見做す。

カタカナの取り扱い

  • ここでいうカタカナとは、全角で1文字を表すものとし、以下のみをカタカナとして取り扱う。

清音
アイウエオ
カキクケコ
サシスセソ
タチツテト
ナニヌネノ
ハヒフヘホ
マミムメモ
ヤユヨ
ラリルレロ
ワヰヱヲ

濁音
ガギグゲゴ
ザジズゼゾ
ダヂヅデド
バビブベボ

半濁音
パピプペポ

その他

ァィゥェォ
ヵヶッ
ャュョ


以下は漢字で変換できるためカタカナとは認めない。(漢字とするかカタカナとするか悩ましい)
ヵヶ

スペースの取り扱い

  • 文頭の全角及び半角スペースは許容しない。
  • 文末の全角及び半角スペースは許容しない。
  • 文中の全角及び半角スペースは2文字連続に限り許容しないが、1文字でづつであれば文中何度出現しても許容する。

※以下に例を示すが、全角スペースも同様の扱いとする。

テスト文字列期待値
漢字 カタカナOK
漢字 カタカナNG
漢字 カ タカナOK
漢字 カ タカナNG
漢 字 カ タ カ ナOK
漢 字 カ タ カ ナNG

全角ハイフン(長音)の取り扱い

  • 文中の全角ハイフン(長音)は2文字連続に限り許容しないが、1文字でづつであれば文中何度出現しても許容する。
  • 全角ハイフン(長音)はカタカナとして表現できる文中にしか存在してはならず、カタカナの文頭には含んではならないが文末には含むことができる。
  • 長音はひらがなかカタカナまでは区別する必要はなく、人間が全角ハイフンだとわかれば良い(ここは、あえて曖昧さを残す)
テスト文字列期待値
漢ー字ギータNG
漢字ギータOK
漢字ギーターOK
漢字ギーーターNG
漢字ギターOK
漢字ーギターNG
漢字ギータOK
ギーター漢ー字NG
ギーター漢字OK
ギーーター漢字NG
ギター漢字OK
ーギター漢字NG

検証方法

カスタムルールとしてグローバルに使いまわしたいため、以下の形式のコードでtest関数を用いてチェックするものとする。

const pattern = /^([ァ-ン一-龥][  ]?)*(((([ァ-ン]|ー)[  ]?)*([ァ-ン]|ー))|[一-龥])$/ console.log(pattern.test(value))

正規表現でここまで苦戦するとは思ってなかったので、連続スペースとかハイフンかと、もうサーバー側で修正した方が早いかも。
フロント側でもきっちりやりたいのは単なる自己満なので。。。
なんだか手を出しちゃいけないものにハマっていってる気がする。

最終追記

既存の一致項目に影響がないまま、項33~43までの期待値と結果が一致することで良しとしたいと思います。
https://codepen.io/postman_tyo/pen/vYOOLNL

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

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

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

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

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

Zuishin

2020/02/10 06:02

前回の質問と回答へのコメントを読む限り単なる作業依頼ですね。それであなたに給料が発生する意味がわかりません。
Zuishin

2020/02/10 06:03

親切に教えてくれている人にものすごい上から目線のことを言うんだな、何様なんだろうと思いました。
退会済みユーザー

退会済みユーザー

2020/02/10 06:14

このシステムは2chかなんかでしょうか? 煽りはやめた方が良いと思いますよ。 そういうのをありがた迷惑といったりします。 それに反応してしまう私も私ですが、善人ぶっているようでも煽りであることに変わりないです。
Zuishin

2020/02/10 06:15

あなたが煽ったという意味のことを書きました。
Zuishin

2020/02/10 06:16

あなたが給料貰うなら、働くのはあなたです。無償で親切に手助けしてくれた人にあの言い方はありません。
退会済みユーザー

退会済みユーザー

2020/02/10 06:17

そんなことをして何になるというのですか? 他所でやってください。なかなか迷惑なものです。
Zuishin

2020/02/10 06:17

お客様面したいなら有償のメンターサービスを使ってください。
退会済みユーザー

退会済みユーザー

2020/02/10 06:18

ここはあなただけの庭ではありません。 「お客様面したいなら有償のメンターサービスを使ってください。」 そのままそっくり返します。
Zuishin

2020/02/10 06:18

https://menta.work/ こちらをどうぞ。お金を払えばあなたのような偉そうなのでもお客様です。
退会済みユーザー

退会済みユーザー

2020/02/10 06:20

私がここを使わずにそちらに移動しなければならない理由はなんでしょうか? 率直に変なやつがいるなーと思いました。
Zuishin

2020/02/10 06:23

https://teratail.com/help > 作業依頼のような投稿をして課題や仕事を無償でやってもらう場所ではありません。 これが理由ですが読めますか?
退会済みユーザー

退会済みユーザー

2020/02/10 06:27

作業依頼のような投稿をして課題や仕事を無償でやってもらう場所ではありません。 感じ方は人それぞれですが、回答者はそうおもっていないから回答してくれたのでしょう。 あなたのエゴを押し付けないでいただきたいです。 > ここはあなただけの庭ではありません。 これの文字が読めますか?
Zuishin

2020/02/10 06:28

読めますが、あなたの庭でもありません。この質問は明らかに作業依頼であり、あなたの庭でない「ここのルール」に反します。
Zuishin

2020/02/10 06:30

回答者が回答してくれたのは、ルールを少し逸脱した質問を大目に見ただけであり、その証拠が最後の言葉に現れているとは思えませんか?
退会済みユーザー

退会済みユーザー

2020/02/10 06:46

思えていないから質問を続けていることが分かりませんか。 全ての人間の思考が貴方と同じであるわけがありません。 > 明らかに作業依頼 その根拠はなんでしょうか? これが作業依頼だとしたら全ての人は何も質問できなくなりますね。 仮に、作業依頼だと思われない質問内容でも、回答で得た知識を元に各ユーザーは何かしらの作業を行っていますよね。 それを作業依頼だのと言われては何も回答できなくなってしまいますね。 大方、貴方はたまたま前の質問を見ていて私の言い方がカンに触ったのではないでしょうか。 私は作業を依頼しているつもりはなく、実際作業で詰まっていて要件を満たす正規表現を組み立てるにはどういう書き方をしたら良いか技術的な質問をしているだけです。 とてもひねくれていると思います。 人の質問に土足で踏み入り、既存回答者が回答しづらくなっていますね。 全部あなたのエゴから起きているものです。 そんなに善人ぶりたいのなら運営に問い合わせればいいでしょう。 行動するなら言動に伴ったやり方をしてください。(一般常識) こんな茶番に付き合っていられるほど暇ではないので、以降関わらないでいただきたい。
Zuishin

2020/02/10 06:50

あなたはわからないところを説明してくれた前の回答者の話を無視し、時間が無いからとコードを求めました。これが作業依頼です。 コードを書くのはあなたの仕事のはずです。 その際にわからないことがあれば教えますが、それを拒否して作業を求めているのに作業依頼でないという意味がわかりません。
Zuishin

2020/02/10 06:52

このような問答を繰り返したくないなら、作業依頼には有償サービスを使ってください。
退会済みユーザー

退会済みユーザー

2020/02/10 07:01

> それを拒否して > コードを求め お言葉ですが、拒否したという文章はどこにありますか? コードを求めている文章はどこにありますか? 私は、思ったことを文にしましたが、拒否もしていなければコードを求めたりもしていないのですが 私に確認もせずに、あなたが早とちりでそう感じただけではないのでしょうか? > その際にわからないことがあれば教えますが、 ずいぶんお詳しいようなので 貴方が本質問の回答者であるjun68yktさんの回答に対して私が返答している内容について回答していただけるのでしょうか。
Zuishin

2020/02/10 07:04

回答は可能ですが、そんな態度の人に回答したくはありません。
退会済みユーザー

退会済みユーザー

2020/02/10 07:06

そうなりますよね。 ですが、あなたがはやとちりでふっかけてきたことですよ。 身勝手な人ですね。
退会済みユーザー

退会済みユーザー

2020/02/10 07:08 編集

自分の責任もとれないくせにでかい言葉ばかり並べるなと言いたい。 肝心なところは回答もせずにね。
Zuishin

2020/02/10 07:09

もうあなたの考え方は他の回答者にも十分伝わったのではないかと思います。
Zuishin

2020/02/10 07:10

自分が正しいと思うならそれで通してください。
BluOxy

2020/02/10 09:49

技術的な質問であれば好きに聞かれても構わないと思いますが、この質問は POSTMAN さんが作成されているアプリケーションの仕様の実現方法なので、実質的な作業依頼になっています。 まずは正規表現の書き方について調べて試し、技術的な不明点が出た時点で質問されるのがこのサイトの使い方と思います。
Zuishin

2020/02/10 14:51 編集

「ヶ」をカタカナとして扱うのにカタカナとして認めないという狂った要件。
退会済みユーザー

退会済みユーザー

2020/02/10 14:52

さっきから喧嘩売ってんですか? 何かおかしなところがあるなら、言葉選んで指摘してはどうでしょう? 人間ですから、完璧なロジック最初からできるわけありませんよ。
Zuishin

2020/02/10 14:52

㍻が Unicode に含まれるのに環境依存。
Zuishin

2020/02/10 14:53

全角で一文字を漢字と呼ぶという無茶苦茶な定義。
Zuishin

2020/02/10 14:54

漢字と判断できるものは漢字という曖昧模糊な二重定義。
Zuishin

2020/02/10 14:55

変換できるものは漢字という抱腹絶倒の三重定義。
Zuishin

2020/02/10 14:56

全角ハイフンと長音の同一視。
Zuishin

2020/02/10 14:57

ざっと眺めただけでこれだけの穴がある。やり直し。
退会済みユーザー

退会済みユーザー

2020/02/10 15:03

> ㍻が Unicode に含まれるのに環境依存。 すいませんが主語述語ぐらいは使っていただけませんか。 ㍻が Unicode に含まれるってことは読み解けますが、環境依存について何が言われたいのかが見えてきません。 > 漢字と判断できるものは漢字という曖昧 曖昧だという例をご存知だから曖昧と言われているんですよね。 ですが、こちらは曖昧な例を知らないから曖昧だとは思っていません。 その例を出していただけませんか。 見たら曖昧さをわかるかも知れません。
Zuishin

2020/02/10 15:06

ヿとか匚は漢字なのかな? ????や????や饣は?
Zuishin

2020/02/10 15:07

誰がそれを漢字と判断すんのって話でしょう。
Zuishin

2020/02/10 15:08

環境依存についても何をもって環境依存とするかの定義がなされてない。㍻は世界中で使える字なので環境依存とは言いにくい。
Zuishin

2020/02/10 15:09 編集

もし㍻が環境依存なら平も成も環境依存になる。欧米のコンピューターにはこれらの含まれるフォントが入っていないものがあるかもしれない。
Zuishin

2020/02/10 15:12

➕は十という漢字に見える。だとすればこれは漢字なのか? ????は誰がどう見ても漢字。
Zuishin

2020/02/10 15:13

これが曖昧模糊でなければ何なんでしょうか?
退会済みユーザー

退会済みユーザー

2020/02/10 15:16

なるほど、、、 もう少し考えてみます。 丁寧にありがとうございます!
退会済みユーザー

退会済みユーザー

2020/02/10 15:22

気になった箇所だけ失礼。 >もし㍻が環境依存なら平も成も環境依存になる ` 漢字は全角で1文字を表すものとする。` となっているところを ` 漢字は全角1文字で1つの漢字を表すものを漢字として扱う` で補正ききそうな気はします。 > ????は誰がどう見ても漢字。 え、これは漢字ではなく絵文字に入るのでは????
Zuishin

2020/02/10 15:23

漢字に見えたら漢字という定義なら漢字でしょう。だから曖昧模糊と言ってる。
Zuishin

2020/02/10 15:25

林は漢字二文字。
Zuishin

2020/02/10 15:25

森は漢字三文字。
Zuishin

2020/02/10 15:28

> ` 漢字は全角1文字で1つの漢字を表すものを漢字として扱う` 定義が再帰している。
Zuishin

2020/02/10 15:28

結局誰か個人の判断でしかない。こんなものは要件定義とは言わない。
退会済みユーザー

退会済みユーザー

2020/02/10 15:37 編集

認識の仕方が違うのかもしれません。 林も森も漢字1文字です。 森林(しんりん)は漢字5文字だというのでしょうか? 漢字2文字だと思います。(全角1文字で1つの漢字を表す) 業務レベルの要件定義なら、それこそこんな正規表現でも1週間ほどかけてみっちり作り込みますが ここではそこまではしません。 個人の判断でしかないのでしたら、伝わる方が現れるまで こちらの隙間時間で質問の仕方を若干変える繰り返しになります。
Zuishin

2020/02/10 15:39

へえ。㍻は一文字じゃないの? これは一文字ですよ。
退会済みユーザー

退会済みユーザー

2020/02/10 15:42 編集

全角1文字で1つの漢字を表す、を満たせていないからです。 ㍻は、全角1文字で平と成という2つの漢字を表しています。 林や森は木から成り立っていますが、林や森単体でも 全角1文字で1つの漢字として成り立っています。
Zuishin

2020/02/10 15:42

誰かの判断に依存するような定義は定義とは言わない。 フロントエンドとバックエンドで違う人が判断してたら違う定義になるでしょ。 顧客と制作で違う人が判断してたら作り直しになるでしょ。 だからやり直し。
Zuishin

2020/02/10 15:43 編集

漢字を定義するのに一つの漢字を表すという定義は無い。 再帰してる。結論ありきで言ってるだけで何も定義されていない。
退会済みユーザー

退会済みユーザー

2020/02/10 15:44

要は、プログラムでそれは実現できないと言っていますか?
退会済みユーザー

退会済みユーザー

2020/02/10 15:44

全角1文字で1つの漢字を表すことを判定する術がないと。
Zuishin

2020/02/10 15:45

当たり前。まず漢字の定義がなされてない。
Zuishin

2020/02/10 15:46

raccy さんは「漢字とは」という定義をちゃんと要件の中に入れてたでしょ。劣化してどうする。
Zuishin

2020/02/10 15:48

漢字の定義がなされてないのに「漢字一文字を漢字とする」というのは無意味。何度も言ったけど。
退会済みユーザー

退会済みユーザー

2020/02/10 17:02 編集

なるほど、それはごもっともです。 そしたら、プログラムがどうやって漢字であるかを判定しているのか、そういうコアな部分から知っていかないとこの問題は解決しそうにないですね。 しかし、そこまで時間をさくわけにはいかないので、別のアプローチを考えます。
guest

回答2

0

漏れがあったのは要件が正確ではなく、曖昧な部分があるからです。厳格な要件を定めるところから始めなければなりません。

要件

  • HTML5のinput要素におけるpattern属性に使用し、入力値のチェックに使用する。
  • 対応ブラウザはPC環境のみターゲットとし、最新のGoogle Chrome、Chromium版Microsoft Edge、Apple Saffariとする。その他のブラウザは考慮しない。
  • 漢字とカタカナのみで構成される場合のみマッチする。
    • 漢字はScriptプロパティがHanであるUnicode文字とする。
      • Hanには、JIS未登録の日本では使用されない漢字も含まれる。
      • Hanには、(U+337B)のような漢字を使用したCJK互換用文字は含まれない。
    • カタカナはScriptプロパティがKatakanaであるUnicode文字と長音記号(U+30FC)とする。
      • Katakanaには、(U+31F0)等の片仮名拡張や(U+FF71)等の半角・全角形の半角片仮名、(U+3300)等の片仮名のみで構成されたCJK互換用文字が含まれる。(他にもあるかも知れない)
      • Katakanaには、片仮名体系にあると言った記号や、と言った濁点・半濁点は含まれない。
  • 例外として、漢字またはカタカナの間に スペース(U+0020)または 和字間隔(U+3000)のどちらか一つだけがあっても良い。
    • スペースと和字間隔は、両方が連続してあってはならない。
    • スペースと和字間隔は、連続して二つ以上あってはならない。
    • スペースと和字間隔は、漢字と漢字、カタカナとカタカナ、漢字とカタカナおよびその逆の間であっても良い。
  • 合字や結合文字は考慮せず、コードポイント単位で判断する。(U+30F4)はカタカナとするがヴ(U+30A6 U+3099)はカタカナとはしない。
  • UTF-16ではサロゲートペアになってしまう文字であっても、一つのコードポイントとして判定する。
  • 空文字列はpatternでのチェックが行われないが、マッチはさせない。
  • 対応するUnicodeのバージョンはブラウザの実装に依存とする。
  • 正規表現はASCII文字のみを使用して表現する。

正規表現

(\p{Script=Han}|\p{Script=Katakana}|\u30FC)+([ \u3000](\p{Script=Han}|\p{Script=Katakana}|\u30FC)+)*

Google Chrome 80.0.3987.87 でのみ確認しています。その他のブラウザでは確認していませんが、Chromium版Microsoft Edge、Apple Saffariでも動作すると思われます。

確認用HTML

HTML

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width"> 6 <title>確認用</title> 7 <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> 8 <script type="module"> 9 const form = document.getElementById('form'); 10 const inputText = document.getElementById('inputText'); 11 inputText.addEventListener('input', () => { 12 if (inputText.value) { 13 form.classList.add('was-validated'); 14 } else { 15 form.classList.remove('was-validated'); 16 } 17 }); 18 </script> 19 </head> 20 <body> 21 <div class="container-fluid mt-2 mx-2"> 22 <form id="form"> 23 <div class="form-group row"> 24 <label for="inputText" class="col-sm-2 col-form-label">テキスト入力</label> 25 <div class="col-sm-8"> 26 <input id="inputText" class="form-control" type="text" pattern="(\p{Script=Han}|\p{Script=Katakana}|\u30FC)+([ \u3000](\p{Script=Han}|\p{Script=Katakana}|\u30FC)+)*"> 27 <div class="valid-feedback"> 28 OK 29 </div> 30 <div class="invalid-feedback"> 31 NG 32 </div> 33 <div> 34 </div> 35 </form> 36 </div> 37 </body> 38</html>

私が書いた要件と期待しているものが異なるというのであれば、上に書いた要件のように厳格な要件を質問に追記してください。

投稿2020/02/10 10:44

編集2020/02/10 16:51
raccy

総合スコア21739

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

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

退会済みユーザー

退会済みユーザー

2020/02/10 12:02

お見苦しい中、ありがとうございます。 既に回答されているjun68yktさんのパターンを参考に以下で動作確認できております。 https://codepen.io/postman_tyo/full/vYOOLNL 細かい部分を日本語で説明するとなるとまだ無理なのでそこを解析している段階です。
raccy

2020/02/10 13:01

> 細かい部分を日本語で説明するとなるとまだ無理 それは要件が固まっていないと言うことではないのですか?そうであれば、完成は永遠に無理ですよ。「????野家」とか「ヱヴァンゲリヲン」とかがOKかNGなのかを本当に考えているのですか?
退会済みユーザー

退会済みユーザー

2020/02/10 13:26 編集

> それは要件が固まっていないと言うことではないのですか? そういう意味ではなく、jun68yktさんが提示していただいたコードのどの部分からどの部分が〜〜〜の部分をあらあしているとか、コードを日本語で説明するのがまだ無理(つまり自分で補正修正がかけられない)ということです。 ちなみに、????野家は今試してみましたが、「????」はアウトなんですね、、、 ????野家の「????」はOKですし、 ヱヴァンゲリヲンの「ヴ」もOKです。 (codepenでテストコード書いてみたものはそこまで考慮されていませんが) raccyさんが提示いただいたものはありがたいのですが、 ``` const pattern = /^ぱたーん$/ return pattern.test(value) ``` という形で実装できるように捉え切れていないものも捉えられるよう調べてみます。 もしご存知でしたら教えていただけると助かります。
raccy

2020/02/10 13:41

テストコードを追加するのではなく、要件をはっきりさせてください。AはOK、BはNGと後出しされるとどんなコードを書いても希望のものには辿り着きません。また、どのようなコードに収めるのかという話も質問には一切書いていないです。正規表現以外の部分が完成していて、後はそこだけというのであれば、そこにあったようにコードを書かないと無駄になります。 そういった部分を**質問文に追記**してください。そうで無いと、私以外の人が回答しようとしても同じことの繰り返しです。質問文で要件がはっきりと確定するまで、私はこれ以上回答しようがありません。
退会済みユーザー

退会済みユーザー

2020/02/10 14:44

Unicode文字やU+30FCなど細かいところは分かりませんが、要件として定めました。
退会済みユーザー

退会済みユーザー

2020/02/10 16:58

「????野家」と「吉野家」は同じようで違うのですね。 最終的に考えましたが、こういうのは捨てます。 吉野家で手入力したら普通に、漢字として拾ってくれるので、そういうマイナーなことするユーザーは考慮しません。 提示していますcodepenの、既存の一致項目に影響がないまま、項33~43までの期待値と結果が一致することで良しとしたいと思います。
raccy

2020/02/11 04:36

質問の要件にはまだ曖昧さが残っていると私は考えているのでこれ以上回答はしませんが、満足したものができたのであれば、それを回答して自己解決して、質問を閉じてください。
guest

0

こんにちは

以下でどうでしょう?

javascript

1const regexp = /^([一-龥][  ]?)*(((([ァ-ン]|ー)[  ]?)*([ァ-ン]|ー))|[一-龥])$/

上記の正規表現で、ご質問にある各文字列をテストするコードを作成して、以下に上げておきました。

以下で、試すことができると思います。

以下は、上記の手順を私の手元のターミナルで行ったときのキャプチャです。

イメージ説明

以上、参考になれば幸いです。

投稿2020/02/09 18:57

jun68ykt

総合スコア9058

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

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

退会済みユーザー

退会済みユーザー

2020/02/10 05:54

ご提示いただきありがとうございます。 パターンはいくつか挙げていますが、 「基本的な許容文字形式に加え、文字列の間にあるスペースは1つまでとしたい」 がやりたいことなので以下がNGになってしまいます。 `カタカナ漢字` 「漢字とカタカナに加え、文字列の間にあるスペースは1つまでとしたい」 としたときの正規表現はできないのですかね。。。
退会済みユーザー

退会済みユーザー

2020/02/10 06:10

以下で実現できましたが1つ1つ理解したいのでお付き合いいただけると助かります。 /^([ァ-ン一-龥][  ]?)*(((([ァ-ン]|ー)[  ]?)*([ァ-ン]|ー))|[一-龥])$/ ^はマニュアル通り分かります。 ・先頭の文字列はカタカナもしくは漢字でなければならない ^([ァ-ン一-龥][  ]?)*の部分ですね。 ただ、なぜ^([ァ-ン一-龥  ]?)*のようにまとめられないのかが分かりません。 最後の$は文末ということはわかるのですが、 (((([ァ-ン]|ー)[  ]?)*([ァ-ン]|ー))|[一-龥]) の部分の分け方がどうなっているのかが分かりません。 要望を日本語で説明すると、 文字列の間にあるスペースは1つまでとしたいなので その部分が(([ァ-ン]|ー)[  ]?)なのかと推測はできますが、 「文字列の間にある」という部分に(([ァ-ン]|ー)[  ]?)があり、 この部分だけ見ると私の理解では 「文中にマッチできるのはカタカナか全角ハイフンか両スペースが1つであり」 というふうに読めるのですが、 なぜ両スペースだけではなく、カタカナと全角ハイフンの記載をしているのかがわからないです。
jun68ykt

2020/02/11 06:00

こんにちは 私の回答は、ご質問にある「追記」より前の表に書かれている文字列と期待値の組を満たす正規表現の一例を回答したに過ぎませんが、その後、POSTMAN様が他の回答者様と詳細を議論されている内容を拝読し、また「追記」の後に書かれている、さらなる要件を拝読いたしますと、私の回答はPOSTMAN様が回答に期待されている要件のほんの一部ということが分かりました。 さはさりながら、私としては回答したことが無駄になったとは全く思っておりません。むしろ、回答した正規表現を作るにあたって、頭の体操として純粋に愉しませて頂きました。誠にありがとうございました。 コメントを拝読いたしますと自力で解決なさったようで、お慶び申し上げます。正規表現に関して大変高い技術力をお持ちの方とお見受けしまして、私のほうがPOSTMAN先生からご指導賜りたいぐらいです。 暦の上では春ですが、まだまだ余寒厳しい日々がつづきます。 風邪などひかれないようくれぐれもご自愛ください。 草々
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問