waniwanisan
@waniwanisan

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

正規表現を使用したif文

解決したいこと

現在、正規表現を用いてif文を組もうとしていますがなかなか上手くいきません。
if文の内容は
1.文字列に記号が含まれていなければ"OK"
2.文字列に「@」「:」「-」「」のいずれかの記号のみ文字列に含まれていたら"OK"
3.文字列に上の四つ以外の記号のみ文字列に含まれていたら"NG"
4.文字列に「@」「:」「-」「
」のいずれかの記号が含むかつ四つ以外の記号のいずれかが含まれていれば"NG"
のようなif文を組みたいです。

下の例通りに判定したいです。

例)

var xxx = new RegExp(/[!"#$%&'()\*\+\-\.,\/:;<=>?@\[\\\]^_`{|}~]/g);  //全ての記号対象の正規表現
    var reg = new RegExp(/[:\_\-@]/g); //4つの記号対象の正規表現
    if (!(xxx.test(str))) { //もし記号がひとつも含まれていない場合は"OK"
        console.log("OK");
    }
    else {
        if ((xxx.test(str) && !reg.test(str)) && reg.test(str)) { //4つの対象の記号とそれ以外の記号が両方ある場合は"NG"
            console.log("NG");
        }
        else if (xxx.test(str) && !reg.test(str)) { //それ以外の全ての記号のみある場合は"NG"
            console.log("NG");
        }
        else if (reg.test(str)) { //4つの対象記号しかない場合は"OK"
            console.log("OK");
        }
    }

    //(例)文字列
    //aaaaa  OK
    //aaaa@  OK
    //aaaa;  NG
    //aaa;@  NG
    //@@@@@  OK
    //;;;;;  NG

自分で試したこと

検証ツールを用いて文字列の判定→直し→判定・・・無限ループ

0

1Answer

test.js

var regex = new RegExp(/^[0-9a-zA-Z@_\-]*$/);

var str = "hoge@_-";

if (regex.test(str)) {
  console.log("正規表現パターンに一致しています。");
}else{
  console.log("正規表現パターンに一致していません。");
}

月並みですが、シンプルに上の処理ではいけませんか?

0Like

Comments

  1. @waniwanisan

    Questioner

    var regex = new RegExp(/^[0-9a-zA-Z@_:-]*$/);

    上記の記述でどうにか実装できました。正規表現はコピペがありふれすぎていて自身で一からどう組むかまだ理解できていないのでそこを重点的に勉強していきたいです。
    ありがとうございます。

Your answer might help someone💌