Thursday, August 29, 2013

Input Field Validation

activity_main.xml
------------------
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"    
    tools:context=".MainActivity" >
 <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/et_normal_text"
            android:hint="Enter Normal Text"
            android:inputType="text"
            android:textStyle="bold"/>

    <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/et_email_address"
            android:textStyle="bold"
            android:inputType="textEmailAddress"
            android:hint="Enter Email Address"/>

    <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/et_phone_number"
            android:hint="Enter Phone Number"
            android:inputType="phone"
            android:textStyle="bold"/>

    <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Submit"
            android:id="@+id/btn_submit" />
</LinearLayout>


Validation.java
-----------------
package com.example.inputfieldvalidation;
import android.widget.EditText;
import java.util.regex.Pattern;
public class Validation {
// Regular Expression
    // you can change the expression based on your need
    private static final String EMAIL_REGEX = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
    private static final String PHONE_REGEX = "\\d{3}-\\d{7}";
 
    // Error Messages
    private static final String REQUIRED_MSG = "required";
    private static final String EMAIL_MSG = "invalid email";
    private static final String PHONE_MSG = "###-#######";
 
    // call this method when you need to check email validation
    public static boolean isEmailAddress(EditText editText, boolean required) {
        return isValid(editText, EMAIL_REGEX, EMAIL_MSG, required);
    }
 
    // call this method when you need to check phone number validation
    public static boolean isPhoneNumber(EditText editText, boolean required) {
        return isValid(editText, PHONE_REGEX, PHONE_MSG, required);
    }
 
    // return true if the input field is valid, based on the parameter passed
   /* public static boolean isValid(EditText editText, String regex, String errMsg, boolean required) {
 
        String text = editText.getText().toString().trim();
        // clearing the error, if it was previously set by some other values
        editText.setError(null);
 
        // text required and editText is blank, so return false
        if ( required && !hasText(editText) ) return false;
 
        // pattern doesn't match so returning false
        if (required && !Pattern.matches(regex, text)) {
            editText.setError(errMsg);
            return false;
        };
 
        return true;
    }*/
    public static boolean isValid(EditText editText, String regex, String errMsg, boolean bRequired) {
    // text required and editText is blank, so return false
    String sText = editText.getText().toString().trim();
    // clearing the error, if it was previously set by some other values
    editText.setError(null);
    if (sText.length() == 0) {
    if (bRequired) {
    editText.setError(REQUIRED_MSG);
    return false;
    }
    } else {
    // filled field
    // pattern doesn’t match so returning false
    if (!Pattern.matches(regex, sText)) {
    editText.setError(errMsg);
    return false;
    }
    }
    return true;
    }
 
    // check the input field has any text or not
    // return true if it contains text otherwise false
    public static boolean hasText(EditText editText) {
 
        String text = editText.getText().toString().trim();
        editText.setError(null);
 
        // length 0 means there is no text
        if (text.length() == 0) {
            editText.setError(REQUIRED_MSG);
            return false;
        }
 
        return true;
    }
}


MainActivity.java
--------------------
package com.example.inputfieldvalidation;

import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
private EditText etNormalText;
   private EditText etEmailAddrss;
   private EditText etPhoneNumber;
   private Button btnSubmit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
registerViews();
}

private void registerViews() {
etNormalText = (EditText) findViewById(R.id.et_normal_text);
       // TextWatcher would let us check validation error on the fly
       etNormalText.addTextChangedListener(new TextWatcher() {
           public void afterTextChanged(Editable s) {
               Validation.hasText(etNormalText);
           }
           public void beforeTextChanged(CharSequence s, int start, int count, int after){}
           public void onTextChanged(CharSequence s, int start, int before, int count){}
       });
 
       etEmailAddrss = (EditText) findViewById(R.id.et_email_address);
       etEmailAddrss.addTextChangedListener(new TextWatcher() {
           // after every change has been made to this editText, we would like to check validity
           public void afterTextChanged(Editable s) {
               Validation.isEmailAddress(etEmailAddrss, true);
           }
           public void beforeTextChanged(CharSequence s, int start, int count, int after){}
           public void onTextChanged(CharSequence s, int start, int before, int count){}
       });
 
       etPhoneNumber = (EditText) findViewById(R.id.et_phone_number);
       etPhoneNumber.addTextChangedListener(new TextWatcher() {
           public void afterTextChanged(Editable s) {
               Validation.isPhoneNumber(etPhoneNumber, false);
           }
           public void beforeTextChanged(CharSequence s, int start, int count, int after){}
           public void onTextChanged(CharSequence s, int start, int before, int count){}
       });
 
       btnSubmit = (Button) findViewById(R.id.btn_submit);
       btnSubmit.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               /*
               Validation class will check the error and display the error on respective fields
               but it won't resist the form submission, so we need to check again before submit
                */
               if ( checkValidation () )
                   submitForm();
               else
                   Toast.makeText(MainActivity.this, "Form contains error", Toast.LENGTH_LONG).show();
           }
       });
   }
 
   private void submitForm() {
       // Submit your form here. your form is valid
       Toast.makeText(this, "Submitting form...", Toast.LENGTH_LONG).show();
   }
 
   private boolean checkValidation() {
       boolean ret = true;
 
       if (!Validation.hasText(etNormalText)) ret = false;
       if (!Validation.isEmailAddress(etEmailAddrss, true)) ret = false;
       if (!Validation.isPhoneNumber(etPhoneNumber, false)) ret = false;
 
       return ret;
   }
}

Screens
----------

 

 



No comments:

Post a Comment