2016-09-23 17 views
1

電子メールアドレスにadmin、ファームウェア、サービス&の修復があるかどうかを確認する正規表現を作成しました。電子メールアドレスに「admin」の代わりにput'adを入力すると、要件に応じて正しくないtrueが返されます。Regexが制限された値と正しく一致しません

private static final String EMAIL_PATTERN_New = 
      "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" 
      + "[admin|firmware|repair|service]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; 

static String email = "[email protected]"; 
static String email1 = "[email protected]"; 
static String email2 = "[email protected]"; 
public static boolean validate(final String hex) { 
     pattern = Pattern.compile(EMAIL_PATTERN_New); 
     matcher = pattern.matcher(hex); 
     return matcher.matches(); 
    } 
System.out.println(validate(email));  //true 
System.out.println(validate(email1));  //true but it should be false 
System.out.println(validate(email2)); //true but it should be false 

他の電子メールアドレスファームウェア、サービス、修理と同じです。

+2

置き換え '[管理者|ファームウェア|修理|サービス] +' 'と(管理者|ファームウェア|修理|サービス)' –

+0

WiktorStribiżew静的な文字列EMAIL2 @ =「[email protected] .com "; +を+と置き換えてもtrueを返します。むしろそれは間違っているはずです。 – Harleen

+0

[こちらをご覧ください](https://regex101.com/r/iZ6uT2/3)。正規表現と一致しないはずです。そして[これはJavaのデモです](https://ideone.com/MbbE1A) –

答えて

1

[admin|firmware|repair|service]+(admin|firmware|repair|service)に置き換える必要があります。

this regex demo

[admin|firmware|repair|service]+を参照してください(これは+に)など別の文字に一致する文字クラス、ad、一回以上です。だから、それはあなたがして、Javaで正規表現を短縮することができますなどadaddfirなど

(admin|firmware|repair|service)admin、またはfirmwareのいずれかに合致する、構造をグループ化シーケンスであり、

注意と一致します

private static final String EMAIL_PATTERN_New = "^[\\w+-]+(?:\\.[\\w-]+)*@(?:admin|firmware|repair|service)(?:\\.[A-Za-z0-9]+)*\\.[A-Za-z]{2,}$"; 

あなたも^とをドロップすることができます。\w[_a-zA-Z0-9]を交換しますmatches()メソッドで正規表現を使用しているためです。

Java demo from IDEONE

import java.util.*; 
import java.util.regex.*; 
import java.lang.*; 
import java.io.*; 

class Ideone 
{ 
    private static final String EMAIL_PATTERN_New = 
      "^[\\w+-]+(?:\\.[\\w-]+)*@(?:admin|firmware|repair|service)(?:\\.[A-Za-z0-9]+)*\\.[A-Za-z]{2,}$"; 

    public static void main (String[] args) throws java.lang.Exception 
    { 
     String email = "[email protected]"; 
     String email1 = "[email protected]"; 
     String email2 = "[email protected]"; 

     System.out.println(email.matches(EMAIL_PATTERN_New));  // true 
     System.out.println(email1.matches(EMAIL_PATTERN_New)); // false 
     System.out.println(email2.matches(EMAIL_PATTERN_New)); // false 
    } 
} 
関連する問題