Last active
July 30, 2018 09:45
-
-
Save nontravis/c684fced5a892ab2f106f4f4ba3a716f to your computer and use it in GitHub Desktop.
Validate.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.support.annotation.IntDef | |
import java.util.regex.Pattern | |
/** | |
* Created by「 The Khaeng 」on 27 Mar 2018 :) | |
*/ | |
//common validate at index 0 | |
const val VALIDATE = 0x0001 | |
const val INVALIDATE = 0x0002 | |
//common string validate at index 1 | |
const val INVALIDATE_EMPTY = 0x0010 or INVALIDATE | |
//email validate at index 2 | |
const val INVALIDATE_EMAIL = 0x0100 or INVALIDATE | |
const val INVALIDATE_EMAIL_FORMAT = 0x0200 or INVALIDATE_EMAIL | |
const val INVALIDATE_EMAIL_NOT_GMAIL = 0x0300 or INVALIDATE_EMAIL | |
const val INVALIDATE_EMAIL_AT = 0x0400 or INVALIDATE_EMAIL | |
//mobile number validate at index 3 | |
const val INVALIDATE_MOBILE_NUMBER = 0x1000 or INVALIDATE | |
const val INVALIDATE_MOBILE_NUMBER_FIRST_NOT_ZERO = 0x2000 or INVALIDATE_MOBILE_NUMBER | |
const val INVALIDATE_MOBILE_NUMBER_LEN_LESS_NINE = 0x3000 or INVALIDATE_MOBILE_NUMBER | |
const val INVALIDATE_MOBILE_NUMBER_NOT_ALL_NUMBER = 0x4000 or INVALIDATE_MOBILE_NUMBER | |
@IntDef(VALIDATE, | |
INVALIDATE, | |
INVALIDATE_EMPTY, | |
INVALIDATE_EMAIL, | |
INVALIDATE_EMAIL_FORMAT, | |
INVALIDATE_EMAIL_NOT_GMAIL, | |
INVALIDATE_EMAIL_AT, | |
INVALIDATE_MOBILE_NUMBER, | |
INVALIDATE_MOBILE_NUMBER_FIRST_NOT_ZERO, | |
INVALIDATE_MOBILE_NUMBER_LEN_LESS_NINE, | |
INVALIDATE_MOBILE_NUMBER_NOT_ALL_NUMBER) | |
@Retention(AnnotationRetention.SOURCE) | |
annotation class ValidateString | |
fun @receiver:ValidateString Int.isValidate(): Boolean = this and VALIDATE == VALIDATE | |
fun @receiver:ValidateString Int.isInvalidate(): Boolean = this and INVALIDATE == INVALIDATE | |
fun String?.validateCommon(): Int { | |
if (this.isNullOrEmpty()) return INVALIDATE_EMPTY | |
return VALIDATE | |
} | |
fun @receiver:ValidateString Int.isInvalidateEmail(): Boolean = this and INVALIDATE_EMAIL == INVALIDATE_EMAIL | |
fun String?.validateEmail(): Int { | |
if (this.validateCommon().isInvalidate()) return this.validateCommon() | |
if (!Pattern.compile("[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}\\@[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}(\\.[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25})+").matcher(this).matches()) return INVALIDATE_EMAIL_FORMAT | |
if (this?.toLowerCase()?.contains("gmail") == false) return INVALIDATE_EMAIL_NOT_GMAIL | |
return VALIDATE | |
} | |
fun @receiver:ValidateString Int.isInvalidateMobileNumber(): Boolean = this and INVALIDATE_MOBILE_NUMBER == INVALIDATE_MOBILE_NUMBER | |
fun String?.validateMobileNumber(): Int { | |
if (this.validateCommon().isInvalidate()) return this.validateCommon() | |
if (this != null && this.length > 1 && this[0] != '0') return INVALIDATE_MOBILE_NUMBER_FIRST_NOT_ZERO | |
if (this != null && this.length < 9) return INVALIDATE_MOBILE_NUMBER_LEN_LESS_NINE | |
if (!Pattern.matches("\\d+", this)) return INVALIDATE_MOBILE_NUMBER_NOT_ALL_NUMBER | |
return VALIDATE | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment