Skip to content

Instantly share code, notes, and snippets.

@nontravis
Last active July 30, 2018 09:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nontravis/c684fced5a892ab2f106f4f4ba3a716f to your computer and use it in GitHub Desktop.
Save nontravis/c684fced5a892ab2f106f4f4ba3a716f to your computer and use it in GitHub Desktop.
Validate.kt
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