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

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

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

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

正規表現

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

Q&A

解決済

2回答

5125閲覧

javascript 正規表現 全角文字を部分的にはじく

coko1

総合スコア276

JavaScript

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

正規表現

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

0グッド

0クリップ

投稿2017/04/20 05:35

編集2017/04/20 09:45

以下の項目のみを許容する正規表現はどのように実現したらよいでしょうか?、
・半角(半角カナ含む)
・全角カナ
・全角記号

javascript

1/[ぁ-ん一-龠]/

上記の記述だけでははじけない漢字もあるようなので...

/(?:[々〇〻\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF])/

http://tama-san.com/kanji-regex/より上記のような制限の掛け方を見つけて使ってみた所、ある程度実現したいことが出来ているのかなという感じだったのですが(ろくに正規表現の記述を読めないだけですが)、上記の正規表現がどういうことをやっているのかが分からないので教えてくださると嬉しいです。
(?:)などはどういった意味を持つ記述なのかがわかりません。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/04/20 05:39

逆に言うと ASCII 文字以外は「はじく」ということでいいのですか。だとして、「はじく」というのは具体的にどういうことを言ってますか?
coko1

2017/04/20 05:41

文字列にひらがなと漢字は入ることを許さないということです。それ以外の全角文字はもちろん英数字記号等は許容したいのです。
退会済みユーザー

退会済みユーザー

2017/04/20 05:43

あなたの言う「ひらがな」と「漢字」って何ですか?
coko1

2017/04/20 06:04

どういう意図の質問でしょうか
退会済みユーザー

退会済みユーザー

2017/04/20 06:11 編集

こっちが聞きたいです。IME パッドが使えるならそれを開いて Unicode にはどういう文字があるか見てください。そしてそれらの内、あなたの言う「ひらがな」と「漢字」がどれに該当するかを考えれば私の言ってることが分かると思います。
Zuishin

2017/04/20 07:31

たとえばアラビア文字とか、麻雀パイとか、顔とか、統合カナダ先住民音節とか、上付き文字とか、点字とか、それらを通してなぜ漢字とひらがなだけ? ということです。あと、繁体字や簡体字は漢字ですがどうしますか?
coko1

2017/04/20 08:28

全角については全角カタカナと記号以外をはじきたかったのでひらがなと漢字は許さないとしただけです。ほかにも考慮する全角文字があったのは知りませんでした。失礼しました。
Lhankor_Mhy

2017/04/20 10:58

質問を変更する時には慎重にお願いします。特に、すでに回答をいただいている場合は整合がとれなくなりますので、追記するか別質問を立てる方がいいかと思います。
guest

回答2

0

ベストアンサー

カタカナ(全角・半角)はOKということでしょうか。

そういう判定をしたい場合、UNICODEのコードポイント表を参照して「ここからこの範囲を除外」というように調べないといけないと思います。


追記2:Lhankor_Mhyさんが解説してくださっているので、少しだけ補足的にコメントします。

javascipt上で文字はUTF16で表現されるため、ほとんどの文字はjavascriptのstring一文字で表現できるのですが、漢字にはUTF16一文字では表現できないものがあります。それらの文字はサロゲートペアと呼ばれ、「string二文字」で一つの文字に、つまりjavascript上length===2であるようなstringが漢字一文字を表すことがあるのですね。そのような文字コードの範囲は以下のようになってます。

\uD800-\uDBFFこれはサロゲートペア1文字目の範囲
\uDC00-\uDFFFこれがサロゲートペア2文字目の範囲

修正後の質問にかかれているパターンにはこのサロゲートペア範囲を対象にしていますのでこの点も注意して読み解いてみてください!


訂正1:質問コメントで下記がやりたいことではないと分かりましたので、これ以降は無視してください。

ひょっとしたらカナ文字、ギリシャ文字、ロシア文字(それらは感じでもヒラカナでもありませんが)などの多くの文字もはじきたいのではありませんか?
つまりあなたがしたいことはASCII文字のみに限定することではないかなというふうに思えました。

もしASCIIの範囲以外をチェックアウトしたいなら簡単に以下のようにしたらいかがでしょう。

javascript

1if (str.match(/[^\x00-\x7E]/)) { 2 console.log('不当文字が含まれてました!'); 3}

投稿2017/04/20 05:42

編集2017/04/21 03:28
KSwordOfHaste

総合スコア18394

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

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

0

変更後の質問に回答します。

(?:x)
x にマッチしますが、マッチしたものを記憶しません。これはキャプチャしないグループ (non-capturing groups)と呼ばれます。マッチした部分文字列は、マッチ結果の配列の要素 [1], ..., [n] と、あらかじめ定義された RegExp オブジェクトのプロパティ $1, ..., $9 からは参照することができません。

RegExp - JavaScript | MDN

[xyz]

[a-c]

文字の集合。囲まれた文字のどんな 1 文字にもマッチします。ハイフンを用いて文字の範囲を指定することができます。ただしハイフンが角括弧でくくられた文字の先頭または末尾にある場合は、通常の文字として文字集合に含まれている、リテラルのハイフンになります。

例えば、[abcd] は [a-d] と同じです。これは "brisket" の 'b' や "chop" の 'c' にマッチします。
RegExp - JavaScript | MDN

\uhhhh
hhhh( 4 桁の 16 進表現)で表される UTF-16 コード単位にマッチします【訳注: u は Unicode の u から。つまり、これは Unicode エスケープシーケンスです】。

RegExp - JavaScript | MDN

x|y

x または y にマッチします。

例えば、/green|red/ は、"green apple" の 'green' や "red apple" の 'red' にマッチします。
RegExp - JavaScript | MDN

その記事にはありませんでしたが、javascriptの正規表現でもU+hhhhhは指定できます。

javascript

1/[々〇〻\u3400-\u9FFF\uF900-\uFAFF\u{20000}-\u{2FFFF}]/u.test('????'); 2//U+20000ですが、trueを返します。

投稿2017/04/20 11:22

Lhankor_Mhy

総合スコア36115

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問