2

正規表現 は"String regex = "[0-9a-z]+@[0-9a-z]+.+[0-9a-z]";"、電子メール検証のテストに使用されます。基本的に、電子メールが英数字の文字列で始まり、その後に 1 つの @ 記号が続き、その後に別の英数字の文字列が続き、その後に 1 が続く場合にのみ、電子メールがこのパターンに一致するようにしようとしています。英数字の文字列。失敗したのは、最後の . の後に英数字の文字列なしで電子メールを入力すると、プログラムが正規表現文字列と一致することです。.? の後に別の英数字の文字列が必要になるようにするにはどうすればよいですか? コード全体は次のとおりです。

import java.util.Scanner;
import java.util.regex.*;

public class Regex
{   
    public static void main (String[]args){

        Scanner input = new Scanner(System.in);
        System.out.println("Please enter your Email");
        String mail = input.nextLine();

        String regex = "[0-9a-z]+@[0-9a-z]+.+[0-9a-z]";

        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(mail);

        if(m.find()) {
            System.out.println("VALID");
        } else {
            System.out.println("INVALD");
        }
    }
}
4

2 に答える 2

4

式でエスケープされてい ないものは、任意の文字を.表します。またはを使用して、リテラル ドットに一致させる必要があります。\\.[.]

String regex = "[0-9a-z]+@[0-9a-z]+[.]+[0-9a-z]";

ドットの+後ろは、「前の式の 1 回以上の出現」を意味します。上記の「前の式」は 1 つのドットです。電子メールのドメイン アドレスの複数のセグメントを一致させるには、括弧を追加する必要があります。

String regex = "[0-9a-z]+@([0-9a-z]+[.])+[0-9a-z]+";
于 2013-02-03T17:30:43.073 に答える
1

少し良い正規表現には、行の始まり^と行の終わり$アンカーが含まれます。

それ以外の場合は、文字列内の有効な電子メールの単一のインスタンスと一致するだけで済み、合格します。また、1つ以上を示すプラス記号の代わりに、{2,4}を追加して2〜4文字に制限することもできます。これらがなければ、次のようなものがあります

myemail @ gmail.com @ thisIsOdd.helloworld.anythingelse

誤って有効になります。

String regex = "^[0-9a-z]+@([0-9a-z]+[.])+[0-9a-z]{2,4}$";

于 2013-02-03T18:04:32.940 に答える