34555


[tokyo-wabisabi-boys.net](http://tokyo-wabisabi-
boys.net/blog/javascriptjquery/js-string-regex-
check)によると、全角文字に相当している正規表現は`/^[^\x01-\x7E\xA1-\xDF]+$/`です。「全角文字 **または**
ローマ字・数字(`\w`)」なら、どうでしょうか。`[^\x01-\x7E\xA1-\xDF]+|\w+`は確かに正しくありません。


CC BY-SA 3.0
2017-05-08T07:31:05.127
34545
2017-05-08T12:49:47.597
16876
question
javascript 正規表現
正規表現：全角文字またはローマ字・数字


>
[code]

>     [^\x01-\x7E\xA1-\xDF]+|\w+
>  
[/code]

これは「全角文字列(`[^\x01-\x7E\xA1-\xDF]+`)または半角英数字文字列(`\w+`)」を表しており、両者を混在させることはできません。おそらく`([^\x01-\x7E\xA1-\xDF]|\w)+`が正しいのではないでしょうか。

またJavaScriptでの`\w`は文字コードでいえば`\x30-\x39`(数字)、`\x41-\x5a`(大文字)、`\xf`
(_)、`\x61-\x7a`
(小文字)に該当しますので、`\x01-\x7E`からこれらの区間を除外して`[^\x01-\x2f\x3a-\x40\x5b-\x5e\x60\x7b-\x7E\xA1-\xDF]+`とすることも可能です。


CC BY-SA 3.0
2017-05-08T07:50:25.473
34547
2017-05-08T07:50:25.473
5750
34545
answer


すでに承認された回答がついてしまっていますが、元記事の内容に間違いがありますので、念のため。

> 半角カナの文字コード範囲を表す正規表現『\xA1-\xDF』も指定に含めています。

と言う記述があるのですが、JavaScriptの文字列表現はUnicodeベースなので、`\xA1-\xDF`は半角カナではなくLatin-1
Supplement領域の`¡¢£¤...ÝÞß`なんて欧文用記号・アクセント記号つきアルファベットを表します。JavaScriptで半角カナの文字コード範囲を表したいなら、`\uFF61-\uFF9F`となります。

[code]

      //半角カナは除かないといけないのにtrueが返ってくる
      alert(/^[^\x01-\x7E\xA1-\xDF]+$/.test("ｱｲｳｴｵ")); //->true
      //この正規表現なら半角カナが「全角」と判定されることはない
      alert(/^[^\x01-\x7E\uFF61-\uFF9F]+$/.test("ｱｲｳｴｵ")); //->false
    
[/code]

そもそもUnicode時代に何を持って「全角」「半角」と判定するのかは難しいところ(上記Latin-1
Supplementの文字は多くの等幅フォントで半角表示されます)で、ASCII互換文字(上記の例だと`\x00`や`\x7F`が抜けていますが)と半角カナ以外を「全角」と定義すると言うのはまぁありだと思うのですが、

> 全角文字に相当している正規表現は/^[^\x01-\x7E\xA1-\xDF]+$/です。

と言うのは **誤り**
で、`/^[^\x01-\x7E\uFF61-\uFF9F]+$/`(または、`/^[^\x00-\x7F\uFF61-\uFF9F]+$/`)としなければなりません。

したがって、(上記部分以外はpgrhoさんの回答そのままですが)「全角文字またはローマ字・数字(\w)」なら`/^([^\x01-\x7E\uFF61-\uFF9F]|\w)+$/`(もしくは`/^([^\x00-\x7F\uFF61-\uFF9F]|\w)+$/`)ですね。

ほんの数行のテストコードを書いていれば気付けたはずなので、広く世間に晒すコードを書く場合にはもう少し気をつけて欲しいものです。


CC BY-SA 3.0
2017-05-08T12:17:55.977
34555
2017-05-08T12:49:47.597
2017-05-08T12:49:47.597
13972
13972
34545
answer