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

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

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

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

正規表現

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

Q&A

解決済

2回答

182閲覧

JavaScriptの正規表現

SQLinjection

総合スコア36

JavaScript

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

正規表現

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

0グッド

0クリップ

投稿2018/11/28 08:34

フォーム入力で、JavaScriptのエラーチェックを実装しています。

入力可能文字は、半角英数と記号(-_@!#$%&'()=^~{};:?<>+*|) が可能として、
それ以外の入力があったときはダイアログでエラーが出る設計なのですが、

JavaScript

1if(!moji.match(/^[a-zA-Z0-9-_@!#$%&'()=^~{};:?<>+*|]*$/)) alert('error');

とインラインに書き込むと上手く動作するのですが、
インクルードされている jsファイルに関数を書き込んで、

JavaScript

1<script src="aaa.js"></SCRIPT> 2if(!check(moji)) alert('error'); 3 4 5// aaa.js の中にある 6function check(moji) 7{ 8 if(!moji.match(/^[a-zA-Z0-9-_@!#$%&'()=^~{};:?<>+*|]*$/)) return false; 9 return true; 10}

というようにすると正しく動作せず、入力可能文字でもエラーとなってしまいますが何故なのでしょう?
ただし、jsファイルはキャッシュではなく新しいデータをロードしており、
HTML内に check() をインラインで書き込んだ場合も正しく動作します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

例えば、mojiが「あいうえお」だったらエラーで良いですか?

ifのほうも動作がおかしいように思いますが

javascript

1function check(moji) 2{ 3 if(!moji.match(/^[a-zA-Z0-9-_@!#$%&'()=^~{};:?<>+*|]*$/)) return false; 4// if(!moji.match(/^[a-zA-Z0-9-_@!#$%&'()=^~{};:?<>+*|]*$/)) return false; 5 return true; 6}

では?

投稿2018/11/28 08:44

papinianus

総合スコア12705

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

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

SQLinjection

2018/11/28 08:52

試してみましたがダメでした。 もう少し具体的に説明します。 (テストケース) 1111 = OK Aaaa = OK s"22 = エラー ああああ = エラー 【現状について】 <index.html>  正しく動作する if(!moji.match(/^[a-zA-Z0-9-_@!#$%&'()=^~{};:?<>+*|]*$/)) alert('error'); <index.html> 正しく動作する function check(moji) { if(!moji.match(/^[a-zA-Z0-9-_@!#$%&'()=^~{};:?<>+*|]*$/)) return false; return false; return true; } <index.html に aa.js をインクルードして>  正しく動作しない <script src="aaa.js"></SCRIPT> <aaa.js> function check(moji) { if(!moji.match(/^[a-zA-Z0-9-_@!#$%&'()=^~{};:?<>+*|]*$/)) return false; return false; return true; } この正しく動作しない場合について… 1111 = 【エラー】 Aaaa = 【エラー】 s"22 = 【エラー】 ああああ = 【エラー】
maisumakun

2018/11/28 08:55

コメントで「return false; return false;」となっていますが、2個めでtrueにならずに全部抜けてしまいそうですね。
SQLinjection

2018/11/28 09:00

ありがとうございます、全体コメで追記させて頂きました。
guest

0

ようやく正しく動作しました。回答してくださった方ありがとうございました。
このエラーチェックをPHP上にインラインで書き込んでいたため、
正規表現の 「$」 の前にエスケープ文字を差し込んでおり、
これをjsファイルにコピペして移植していたことが原因でした。

なお、このエラーチェックは他にも細かいチェックがあって重要な部分を抜粋したものです。

投稿2018/11/28 08:59

SQLinjection

総合スコア36

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問