रैगुलर एक्सप्रेशन (Regex) और Patterns API का उपयोग करके ईमेल वैलिडेशन
एंड्रॉइड में ईमेल एड्रेस वैलिडेट करने के लिए java.util.regex.Pattern और Matcher क्लासेज या android.util.Patterns हेल्पर क्लास का उपयोग किया जा सकता है। यह उदाहरण दोनों दृष्टिकोण दिखाता है।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में प्रोजेक्ट बनाएं।
चरण 2: लेआउट फ़ाइल
res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="ईमेल पता दर्ज करें:"
android:textSize="16sp" />
<EditText
android:id="@+id/etEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/textView"
android:hint="example@domain.com"
android:inputType="textEmailAddress"
android:autofillHints="emailAddress" />
<Button
android:id="@+id/btnValidate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/etEmail"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:onClick="validateEmail"
android:text="वैलिडेट करें" />
<TextView
android:id="@+id/tvResult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/btnValidate"
android:layout_marginTop="24dp"
android:gravity="center"
android:textSize="18sp"
android:textStyle="bold" />
</RelativeLayout>
चरण 3: MainActivity में वैलिडेशन लॉजिक
package com.app.sample;
import android.os.Bundle;
import android.util.Patterns;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.regex.Pattern;
public class MainActivity extends AppCompatActivity {
private EditText etEmail;
private TextView tvResult;
// कस्टम रेगेक्स पैटर्न (RFC 5322 सरलीकृत)
private static final Pattern EMAIL_PATTERN = Pattern.compile(
"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etEmail = findViewById(R.id.etEmail);
tvResult = findViewById(R.id.tvResult);
}
public void validateEmail(View view) {
String email = etEmail.getText().toString().trim();
if (email.isEmpty()) {
tvResult.setText("कृपया ईमेल दर्ज करें");
tvResult.setTextColor(0xFFFF0000); // लाल
return;
}
// विधि 1: एंड्रॉइड बिल्ट-इन Patterns.EMAIL_ADDRESS (API 1+)
boolean isValidAndroid = Patterns.EMAIL_ADDRESS.matcher(email).matches();
// विधि 2: कस्टम रेगेक्स (अधिक नियंत्रण)
boolean isValidCustom = EMAIL_PATTERN.matcher(email).matches();
// विधि 3: अपाचे कॉमन्स वैलिडेटर (यदि लाइब्रेरी जोड़ी हो)
// boolean isValidApache = EmailValidator.getInstance().isValid(email);
String result;
int color;
if (isValidAndroid && isValidCustom) {
result = "✓ वैध ईमेल पता";
color = 0xFF4CAF50; // हरा
} else {
result = "✗ अवैध ईमेल पता";
color = 0xFFFF0000; // लाल
}
tvResult.setText(result);
tvResult.setTextColor(color);
// डीबग जानकारी
String debug = String.format(
"एंड्रॉइड Patterns: %b\nकस्टम रेगेक्स: %b\nइनपुट: %s",
isValidAndroid, isValidCustom, email
);
Toast.makeText(this, debug, Toast.LENGTH_LONG).show();
}
}
विभिन्न रेगेक्स पैटर्न तुलना
| पैटर्न | रेगेक्स | विशेषताएं |
|---|---|---|
| सरल | ^.+@.+\\..+$ | बेसिक @ और डॉट जांच |
| मानक (उपरोक्त) | ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$ | अधिकांश सामान्य ईमेल के लिए अच्छा |
| RFC 5322 पूर्ण | बहुत जटिल (सैकड़ों वर्ण) | सभी वैध ईमेल स्वीकार करता है लेकिन जटिल |
| HTML5 स्पेक | ^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$ | ब्राउज़र मानक |
एंड्रॉइड का बिल्ट-इन Patterns.EMAIL_ADDRESS
// सरलतम उपयोग
if (Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
// वैध
}
// ध्यान दें: Patterns.EMAIL_ADDRESS कुछ वैध ईमेल को अस्वीकार कर सकता है
// और कुछ अमान्य को स्वीकार कर सकता है (यह एक व्यावहारिक समझौता है)
TextInputLayout के साथ रियल-टाइम वैलिडेशन
मटेरियल डिज़ाइन में लाइव एरर दिखाने के लिए:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/tilEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/etEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="ईमेल"
android:inputType="textEmailAddress" />
</com.google.android.material.textfield.TextInputLayout>
// रियल-टाइम वैलिडेशन
etEmail.addTextChangedListener(new TextWatcher() {
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
String email = s.toString().trim();
TextInputLayout til = findViewById(R.id.tilEmail);
if (!email.isEmpty() && !Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
til.setError("अमान्य ईमेल प्रारूप");
} else {
til.setError(null); // एरर साफ करें
til.setErrorEnabled(false);
}
}
});
Kotlin एक्सटेंशन फंक्शन
// String एक्सटेंशन
fun String.isValidEmail(): Boolean {
return Patterns.EMAIL_ADDRESS.matcher(this).matches()
}
// उपयोग
if (emailInput.text.toString().isValidEmail()) {
// वैध
}
चरण 4: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.app.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.MaterialComponents.DayNight">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
सर्वोत्तम अभ्यास
- क्लाइंट-साइड वैलिडेशन केवल UX के लिए - सर्वर पर भी वैलिडेट करें
- Patterns.EMAIL_ADDRESS अधिकांश मामलों के लिए पर्याप्त है
- अत्यधिक सख्त रेगेक्स वैध ईमेल को अस्वीकार कर सकते हैं (उदाहरण:
user+tag@example.com,user@sub.domain.co.uk) - अंतर्राष्ट्रीयकृत ईमेल (यूनिकोड) के लिए विशेष हैंडलिंग चाहिए
- यूजर को टाइप करते समय फीडबैक दें (TextInputLayout + TextWatcher)
नोट: RFC 5322 के अनुसार पूरी तरह से मान्य ईमेल वैलिडेशन अत्यधिक जटिल है। व्यावहारिक ऐप्स के लिए एंड्रॉइड का Patterns.EMAIL_ADDRESS या एक उचित सरलीकृत रेगेक्स पर्याप्त है। अंतिम सत्यापन हमेशा सर्वर-साइड (पुष्टिकरण ईमेल भेजकर) करें।