Description
An utilities class to validate text inside TextInputLayout.
Validator alternatives and similar packages
Based on the "Utility" category.
Alternatively, view Validator alternatives based on common mentions on social networks and blogs.
-
timber
A logger with a small, extensible API which provides utility on top of Android's normal Log class. -
StatusBarUtil
A util for setting status bar style on Android App. -
ExpirableDiskLruCache
Java implementation of a Disk-based LRU cache which specifically targets Android compatibility. -
tape
A lightning fast, transactional, file-based FIFO for Android and Java. -
OpenKeychain
OpenKeychain is an OpenPGP implementation for Android. -
joda-time-android
Joda-Time library with Android specialization -
tray
a SharedPreferences replacement for Android with multiprocess support -
AutobahnAndroid
WebSocket & WAMP in Java for Android and Java 8 -
easydeviceinfo
:iphone: [Android Library] Get device information in a super easy way. -
Android-Templates-And-Utilities
Collection of source codes, utilities, templates and snippets for Android development. -
secure-preferences
Android Shared preference wrapper than encrypts the values of Shared Preferences. It's not bullet proof security but rather a quick win for incrementally making your android app more secure. -
greenrobot-common
General purpose utilities and hash functions for Android and Java (aka java-common) -
Androl4b
A Virtual Machine For Assessing Android applications, Reverse Engineering and Malware Analysis -
vector-compat
A support library for VectorDrawable and AnimatedVectorDrawable classes introduced in Lollipop -
CastCompanionLibrary-android
CastCompanionLibrary-android is a library project to enable developers integrate Cast capabilities into their applications faster and easier. -
android_dbinspector
Android library for viewing, editing and sharing in app databases. -
AndroidBillingLibrary
Android Market In-app Billing Library -
motion
An Android library allowing images to exhibit a parallax effect that reacts to the device's tilt -
EasyCamera
Wrapper around the android Camera class that simplifies its usage -
Colours
A beautiful set of predefined colors and a set of color methods to make your Android development life easier. -
MrVector
[Deprecated] AKA VectorDrawableCompat: A 7+ backport of VectorDrawable -
Reservoir
Android library to easily serialize and cache your objects to disk using key/value pairs. -
davdroid
DAVdroid – CalDAV/CardDAV synchronization for Android 4+ devices -
android-validation-komensky
A simple library for validating user input in forms using annotations. -
dspec
A simple way to define and render UI specs on top of your Android UI. -
routable-android
Routable, an in-app native URL router, for Android -
Treasure
Very easy to use wrapper library for Android SharePreferences
InfluxDB - Power Real-Time Data Analytics at Scale
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Validator or a related project?
README
Download
dependencies {
implementation 'com.github.anderscheow:validator:2.2.1'
}
Usage
Available rules
- LengthRule
- MaxRule
- MinRule
- NotEmptyRule
- NotNullRule
- RegexRule
- AlphabetRule
- AlphanumericRule
- DigitsRule
- EmailRule
- PasswordRule
- FutureRule
- PastRule
- CreditCardRule
- ContainRule
- NotContainRule
- EqualRule
- NotEqualRule
- NotBlankRule
- AllUpperCaseRule
- AllLowerCaseRule
- EndsWithRule
- StartsWithRule
- SymbolRule
Additional predefined rules to use in Validation or Condition
- contain
- notContain
- notEqualTo
- withinRange
- minimumLength
- maximumLength
- alphanumericOnly
- alphabetOnly
- digitsOnly
- symbolsOnly
- allUppercase
- allLowercase
- startsWith
- endsWith
- withCreditCard
- withPassword
- notNull
- notEmpty
- notBlank
- regex
- future
- past
- matchAtLeastOneRule (Only for Validation)
- matchAllRules (Only for Validation)
You can create your own Predefined Rules
// For Validation
fun Validation.customPredefinedRule(keyword: String, ignoreCase: Boolean = false): Validation {
baseRules.add(ContainRule(keyword, ignoreCase))
return this
}
// For Condition
fun Condition.customPredefinedRule(keyword: String, ignoreCase: Boolean = false): Condition {
baseRules.add(ContainRule(keyword, ignoreCase))
return this
}
Beside from using the provided Rules, you can create your own Rule by extending BaseRule (Create as many as you want)
class CustomRule : BaseRule {
override fun validate(value: String?): Boolean {
if (value == null) {
throw NullPointerException()
}
return value == "ABC"
}
// You can use this to return error message
override fun getErrorMessage(): String {
return "Value doesn't match 'ABC'"
}
// or use this to return error message as StringRes
override fun getErrorRes(): Int {
return R.string.error_not_match
}
}
Add it to your Activity class
// Username
// Input: [email protected]
val usernameInput = findViewById(R.id.layout_username)
val usernameValidation = Validation(usernameInput)
.addRule(
// You can also override the default error message
NotEmptyRule(R.string.error_not_empty)
// Use either errorRes() or errorMessage()
// Note: errorRes() has higher priority
NotEmptyRule("Value is empty")
)
.addRule(CustomRule())
// Password
// Input: 12345abc
val passwordInput = findViewById(R.id.layout_password)
val passwordValidation = Validation(passwordInput)
.addRule(NotEmptyRule())
.withPassword(PasswordRegex.ALPHA_NUMERIC)
.minimumLength(8)
Condition
// And Condition
val usernameWithConditionValidation = Validation(usernameInput)
.add(And().add(EmailRule()))
// Or Condition
val usernameWithConditionValidation = Validation(usernameInput)
.add(Or().add(MinRule(5)).add(MaxRule(10)))
// Both by using Predefined Rules
val usernameWithConditionValidation = new Validation(usernameInput)
.matchAllRules(listOf(EmailRule()))
.matchAtLeastOneRule(listOf(MinRule(5), MaxRule(10)))
Mode
Validator.with(applicationContext)
/* Set your mode here, by default is CONTINUOUS */
.setMode(Mode.CONTINUOUS));
Single | Continuous |
---|---|
Validate the input field
// Order of the values on the success callback follow the sequence of your Validation object
Validator.with(applicationContext)
.setMode(Mode.CONTINUOUS)
.setListener(object : Validator.OnValidateListener {
override fun onValidateSuccess(values: List<String>) {
Log.d("MainActivity", values.toTypedArray().contentToString())
Toast.makeText(applicationContext, "Validate successfully", Toast.LENGTH_LONG).show()
}
override fun onValidateFailed(errors: List<String>) {
Log.e("MainActivity", errors.toTypedArray().contentToString())
}
})
.validate(usernameValidation, passwordValidation)
Changelog
2.2.1
- Added
Validation.notNull
,Validation.notEmpty
,Validation.notBlank
,Validation.regex
,Validation.past
andValidation.future
- Can use
TextInputLayout.validate
orTextInputLayout.add
instead ofValidation(TextInputLayout)
in Kotlin
2.2.0
- Added
AllUpperCaseRule
,AllLowerCaseRule
,StartsWithRule
,EndsWithRule
andSymbolRule
- Changed
validate(Any?)
tovalidate(String?)
2.1.2
- Added
NotEmptyRule
- Added error messages into
Validator.OnValidateListener.onValidateFailed()
2.1.0
- Updated Gradle and Kotlin version
- Changed Android Support artifacts to AndroidX
- Removed some install dependencies from README
2.1.0
- Updated Gradle and Kotlin version
- Changed Android Support artifacts to AndroidX
- Removed some install dependencies from README
2.0.1
- Updated to support Android SDK 28
- Converted Android Support to AndroidX
1.3.1
- Addressed some algorithm issues
- Added more test cases
1.3.0
- Removed Validation.and() and Validation.or() by encouraging user to use Condition
- Removed listener parameter from Validator.validate() and required to assigned manually using Validator.setListener()
- Added some predefined rules in Validation and Condition to simplify procedure on adding rules
1.2.2
- Added Dokka to show Kotlin sources
1.2.1
Removed generic type from BaseRule as there's a limitation
validate() only accept "Any?" as parameter
1.2.0
For version lower than 1.2.0, upgrading to latest version may broke your code. Use it at your risk
Updated to Kotlin
Validation does support for
Object
parameter instead of just TextInputLayout (Refer to example below)Set TextInputLayout.setErrorEnabled(false) on every Validate method called
1.1.5
- Removed unwanted log
1.1.4
Fixed an issue where validate will success if last validation pass the rules in Mode.CONTINUOUS
RegexRule now is open class rather than abstract class
1.1.3
Input can be any object, previously restrict to String (Along with proper validation with different object)
Added more test cases to validate input
1.1.2
- Updated ALPHA_NUMERIC_SYMBOLS regex on PasswordRule
1.1.1
- Fixed bug where overloading the constructor with errorMessage or errorRes does not override the default value
1.1.0
Added ability to add conditions (And or Or)
Added mode of validation (Single or Continuous)
Added ability to override errorRes or errorMessage in constructor without overriding the methods
1.0.4
- Added more rules, please check at 'Available Rules'
1.0.3
- Fixed LengthRule wrong validation on maxValue
1.0.2
Added success and failed callback instead of just success callback
Success callback return list of EditText values (Order by sequence of Validation object(s))
1.0.1
Added some common rules (LengthRule, MinRule, MaxRule, RegexRule etc.)
Able to use String as error message
1.0.0
- Introduce Validator library
Testing
I have added unit testing for Rules and Conditions, soon will provide test code on Validation and Validator, please check it out under Test code
Contributions
Any contribution is more than welcome! You can contribute through pull requests and issues on GitHub.
License
Validator is released under the MIT License
*Note that all licence references and agreements mentioned in the Validator README section above
are relevant to that project's source code only.