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

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

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

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

正規表現

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

Q&A

解決済

2回答

4090閲覧

JSでの正規表現(カンマ区切り数字とハイフンのみ許可)

imonikai

総合スコア13

JavaScript

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

正規表現

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

0グッド

0クリップ

投稿2019/03/26 00:37

正規表現を作成するところで躓いてしまっており
ご相談させていただきたく投稿しました。

下記条件に合う正規表現を作成しているのですが
上手くいかない状況です。

【条件】
0. 半角のカンマ区切りの負から正の数であればTRUE
例)-123,456 、234,567,890 、123 、0
→正の数である場合は「+」は付けない(+は許可しない文字とする)
0. 半角ハイフン「-」、全角ハイフン「-」の1文字のみであればTRUE
※「-」「-」だけ入力ならばOK、「--」「--」「--」「----」など複数入っている場合はNG

この条件に合う正規表現を作成してみたのですが
上手くいかずに困っております。
お分かりになる方がいらっしゃいましたら、ご教授お願いいたします。

【作成した正規表現】

javascript

1/^[-]?[,0-9]|[-]|[-]+$/u

実際の使用では

javascript

1new RegExp("^[-]?[,0-9]|[-]|[-]+$");

で動作させています。

※ 「[-]|[-]」の箇所で1回出現の「?」を付加して、「[-]?|[-]?」ともしてみたのですが、うまく行きませんでした。

よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

javascript

1let ary = [ 2 '-', '―', '-123,456', '234,567,890', '123', '0', '10,123', 3 '1,234,567,890', '1,234,567,890,123', 4 '--', '――', '+123', '012,345', '1234,567' 5]; 6 7//let reg = /^(-?[1-9]\d{1,2}?(,\d{3})*|0|-|―)$/; 8let reg = /^(-?[1-9]\d?\d?(,\d{3})*|0|-|―)$/; 9 10ary.forEach (a => { 11 console.log (a, reg.test (a)); 12}); 13

投稿2019/03/26 00:56

編集2019/03/27 16:40
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

otn

2019/03/26 01:34

\d{1,2}? は \d{,2} でいいですね。
退会済みユーザー

退会済みユーザー

2019/03/26 02:06

熟考してなかったね。
imonikai

2019/03/27 00:49

ご回答ありがとうございます 「-」「―」の単品記載と、複数記載は希望通りの動作をしました。 数値区切りに関しては、1,234、1,234,567、1,234,567,890など 先頭(最大桁数近く)のカンマ前の数字が1ケタだけの場合、希望と違う結果がでました。 12,345、123,456 はtrueなのですが、、、、 otnさんのご指摘の箇所を変更してみたところ、数値部分が全てfalseになってしまいました。 先頭カンマの数字が1ケタの場合の処理を何とか追加してみたいと思います
otn

2019/03/27 01:03

hai_haiさんの回答: 量指定子( {n,m} や ? など)は併用できないようです。(\d{1,2})? と括弧で囲めばOK 私の回答: JavaScriptの正規表現の場合、{n,m} の n (繰り返し最小回数)は省略できないようです。\d{0,2} と0を明示してください。 微妙な方言がありますね。
otn

2019/03/27 01:15

JavaScript Perl PHP が、省略不可で、Python Ruby gnu-grep が省略すると0とみなす ですね。 省略不可の言語でも、エラーにはならず、/{,2}/ は "{,2}" という文字列自体とマッチします。Python Rubyから入った人には罠だな。
退会済みユーザー

退会済みユーザー

2019/03/27 07:30

私の貯金額の桁数では問題がなかったのにおかしいですね。 面倒なので以下のようにしてみては?(美しくない!) /^(-?[1-9]\d?\d?(,\d{3})*|0|-|―)$/
imonikai

2019/03/28 05:15

>> hai_hai様 ありがとうございます。 期待通りの結果を得ることができました。 まだまだ勉強不足なので、頂いた正規表現が何をしているものなのか 基本に返って一つずつ、意味を確認していきます ありがとうございました >> otn様 ありがとうございます。 ご指摘のように括弧で括ってみた所、こちらでも期待通りの結果を得ることができました。 こちらのやり方でもできることが確認できましたので 教えていただいた2つの方法の違い等を確認していきます ありがとうございました hai_hai様、otn様の御両方にベストアンサーを付けたいのですが お一方にしかつけられませんので、申し訳ございません。 (気持ちとしてはお二方にベストアンサーとさせてください) 本当にありがとうございました。
guest

0

^([--])?([0-9]{1,3})(,[0-9]{3})*$

投稿2019/03/26 00:45

tkturbo

総合スコア5572

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

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

imonikai

2019/03/27 00:36

ご回答ありがとうございました。 「-」「―」を単品で判断しようとするとfalseが返ってきてしまいました。 「--」「――」のような複数のものが入った場合はfalseが返ってき、希望の値が返ってきました。 その他、カンマ区切り数字についてはどんな桁数を入れてもtrueが返ってきてOKでした。 「-」「―」を単品を許可する部分を作りこんでいきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問