Email Validation - jak jest zbudowany pattern w metodzie vallidate?

0
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Domain {

	public static void main(String args[]) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("Please enter an email address: ");
		String email = scanner.nextLine();

		vallidate(email);		

		Domain domain = new Domain();
		System.out.println("Output: ");
		System.out.println(domain.extractDomain(email));
	}

	private static void vallidate(String email) {
		Pattern p = Pattern.compile("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");
		Matcher m = p.matcher(email);
		if(!m.matches()) {
			throw new IllegalArgumentException("The email you entered is not valid '" + email + "'");
		}
	}

}


Bardzo bym prosił o wytłumaczenie jak jest zbudowany pattern w metodzie vallidate. Czytałem dokumentację javy, ale niestety jako początkujący programista nie jestem w stanie jej zrozumieć na tyle, żeby wiedzieć co tutaj się dzieje. Jakby ktoś mi mógł opisać po ludzku jak jest to zbudowane, żebym trochę załapał i dalej już sobie poradzę. Wiem, że to A-Za itd to jest zakres itp, ^ to początek a $ to koniec, ale co robią te znaczki mnożenia, _ \ i . nie mam pojęcia.

1

To jest wyrażenie regularne. Powiedziane w nim jest:

tekst powinien się zaczynać dowolnym znakiem ze zbioru podkreślenie, litery od A do Z, litery od a do z, cyfry lub minus, gdzie musi wystąpić przynajmniej jeden znak (+ oznacza jeden znak lub więcej). Potem może 0 lub więcej razy (bo jest *, oznacza 0 lub więcej) wystąpić kropka, a po niej znów dowolny znak A-Za-z0-9 więcej niż raz. Potem znak małpy, a za nim wielkie lub małe litery lub cyfry więcej niż raz i znów 0 lub więcej grup kropka, a potem litery, cyfry więcej niż raz. Na końcu ma wystąpić kropka oraz ciąg dwóch lub więcej liter.

Kropka jest znakiem specjalnym, dlatego się ją zapisuje jako \., ale przecież nie możesz podawać \ w ciągach, bo musisz jego samego wyescape'ować przez \\.

Wpisz sobie to wyrażenie na https://regex101.com/, on tam ma zakładkę Explanation, która opisuje co się dzieje.

BTW, jeżeli to wyrażenie ma sprawdzać poprawność e-maila to jest błędne - nie przepuszcza niektórych poprawnych e-maili :P

0

To akurat nie ja pisałem, tylko było na stronie programmr.com w zadaniach dla początkujących, więc pewnie dlatego nie obejmuje całości. Bardzo dziękuję za wyjaśnienie!

1 użytkowników online, w tym zalogowanych: 0, gości: 1