プロが教える店舗&オフィスのセキュリティ対策術

下記ソースコードにて正規表現を作成しました。

(一部のみ抜粋)
HTML:
<form action="send.html" method="POST" id="contact">
<div class="item">
<label for="postal_code" class="label">郵便番号</label>
<input type="text" name="question" id="postal_code" style="width: 55px;">-<input type="text" name="question" id="postal_code2" style="width: 90px;">
</div>
<div class="s_button">
<input type="submit" name="submit" id="submit">
</div>
</form>
__________________________________________
JavaScript:
document.getElementById('contact').onsubmit = function() {
let textvalue3 = document.getElementById('postal_code').value;
let textvalue4 = document.getElementById('postal_code2').value;

if(!textvalue3.match(/^(\d+){3}$/) || !textvalue4.match(/^(\d+){4}$/)) {
window.alert('半角数字の入力、桁数の確認願います(郵便番号)');
return false;
}
};

■半角数字以外は入力禁止
■左側テキストボックスは3桁以外での入力禁止、右側テキストボックスは4桁以外での入力禁止

問題は2番目なのですが、
左側3桁入力の部分にて1桁、2桁の場合は下記ソースコードのアラートが出力されます。
ですが4桁以上の入力をすると、なぜかアラートが出力されません。
下の正規表現では3桁ぴったりの入力でそれ以外はアラートが出るように記述してるのに、なぜか4桁以上の出力でもアラートが出ない様になっています。

右側の4桁以上も同様で、
1桁、2桁、3桁はアラートが出力されますが、5桁以上の場合でもアラートが出力されません

まとめ:
■左側テキストボックス(3桁指定):
1桁、2桁はアラートがでる。
4桁以上はアラートがでない。

■右側テキストボックス(4桁指定):
1桁、2桁、3桁はアラートが出る
5桁以上はアラートが出ない

桁数を指定しているのになぜ?


桁数を指定しているのになぜ、その桁数以上が条件に通ってしまうのでしょうか。
教えて頂きたくお願い致します。

A 回答 (1件)

こんにちは



>/^(\d+){3}$/
\d+と「+」があるので、3桁以上なら何桁でもマッチしてしまいますね。
 /^\d{3}$/
などではいかがでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

+の理解していなかったようです。
てっきり+は同じ文字を重複出来る様になるものだと思ってました。
例:
326 ←+がなくてもエラーにならない
333 ←数字が重複しているため+を入れないとエラーになる

このようなものだとばかり思ってました。
でも下記URLにも書いてありました。
{1,}と同等の意味だったんですね。

https://developer.mozilla.org/ja/docs/Web/JavaSc …
(抜粋):
直前の文字の 1 回以上の繰り返しにマッチする。{1,} と同等。 例えば、/a+/ は "candy" の 'a' や、"caaaaaaandy" のすべての a にマッチする。

おかげで問題なくできました。
教えて頂きありがとうございます。

お礼日時:2020/10/08 17:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!