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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Google Chrome OS

Google Chrome OSは、Google社が開発するオープンソースのオペレーティングシステムです。Linuxベースで、同社のWebブラウザーであるGoogle Chromeの利用を目的としています。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

JavaScript

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

Q&A

1回答

298閲覧

[RegExp] searchメゾットを使用した場合とtestメゾットを使用した場合とで結果が違う

退会済みユーザー

退会済みユーザー

総合スコア0

Google Chrome OS

Google Chrome OSは、Google社が開発するオープンソースのオペレーティングシステムです。Linuxベースで、同社のWebブラウザーであるGoogle Chromeの利用を目的としています。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

JavaScript

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

0グッド

0クリップ

投稿2018/03/08 08:18

以下に記載するような複数の入力項目があるページがあります。

<!DOCTYPE html> <html> <head> </head> <body> <form id="large_form" name="large_form"> <table> <tr> <td> <input type="text" id="input1" name="input1" value=""> </td> </tr> <tr> <td> <input type="text" id="input2" name="input2" value="" /> </td> </tr> <tr> <td> <input type="text" id="input3" name="input3" value="" /> </td> </tr> <tr> <td> <textarea id="input4" name="input4"></textarea> </td> </tr> <tr> <td> <input type="text" id="input5" name="input5" value="" /> </td> </tr> <tr> <td> <textarea id="input6" name="input6"></textarea> </td> </tr> </table> </form> <button onClick="return check();" >OK!</button> </body> </html>

inputタグに入力した文字列を正規表現でチェックするため以下のコードを作成しました
このコードは半角文字が入力されているかをチェックし、入力されていたら背景をピンク色に変更するものです。

var items = []; //入力チェック項目 var field = []; //HTMLエレメント var formname; //選択フォーム var itemname; //選択フィールド //半角文字が入力されていないかチェック items = [ "input1", "input2", "input3", "input4", "input5" ]; var reg_Hs = new RegExp(/[ -~。-゚]/g); var Hs_found = false; for(var i = 0; i < items.length; i++) { itemname = items[i]; field = document.forms[formname].elements[itemname]; field.style.backgroundColor=''; if( /* 正規表現による判定 */ ){ field.style.backgroundColor='#ffdddd'; Hs_found = true; } } //半角文字が入力されている場合処理を停止 if(Hs_found == true) { alert("全角で入力してください"); return false; }

「/* 正規表現による判定 */」の部分に「reg_Hs.test(field.value)」と書くと
一部の項目で判定結果がfalseになりフィールドの背景色が変化しません。

これを「field.value.search(reg_Hs) != -1」とすると
すべての判定結果がtrueになり、フィールドの背景色が変化しました。

6つのフィールドにはすべて"TESTテスト"と入力しています。
input text、textareaを入れ替えても結果は同じです。

ただ正規表現を変えた場合にうまくいっている(ように見える)場合も有るのでいまいち原因がついかめていないです。

testメゾットの判定の仕方が間違っていたりするのでしょうか。

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

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

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

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

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

guest

回答1

0

g修飾子を外してみてはどうですか?
(そもそも機能を使ってないですし)

原因

RegExp.prototype.test()に記載されているように

test() が同じグローバル正規表現インスタンスで複数回呼び出されると、前回のマッチの先に進むことになります。

に合致しているのだと思います

javascript

1var reg_Hs = new RegExp("[ -~。-゚]","g"); 2for(var i=0;i<20;i++){ 3console.log(reg_Hs.test("testあああ")); 4}

「test」の4文字目までチェックしてその後5文字目チェックでfalseを返す

投稿2018/03/08 09:02

編集2018/03/08 09:28
yambejp

総合スコア114742

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

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

yambejp

2018/03/08 09:31

ちなみにtestをexecにすると状況がわかりやすいでしょう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問