Validation and Errors Handling
VGSTextInput Input Validation
VGS Collect SDK provides built-in validation for data intput. Validation is based on defined validation rules set for each specific VGSTextInput
. These rule sets are defined by default for each VGSTextInput based on it's type
value, but you still have possibility to customize them.
VGSTextInput
execute validation after each it's input editing event. You can check validation results through VGSTextInput's state callback: .onStateChange()
.
Default Validation
Default validation for specific input type
:
VGSInputType
Validation Details
.text
Any input will be valid if no other validation rules will be applied
.card
Card number validation with checkSum algorithm(Luhn algorithm), available card lengths for defined card types
.expDate
Any date starting from current month. By default valid expiration date should be in short year format - mm/yy
.cardHolderName
Name, should be 2 or more symbols, valid characters shold match pattern: [a-zA-Z0-9]
.cvc
Card cvc number, should be 3-4 digits. If in same VGSCollect
instance there is associated .cardNumer
field, cvc validation will be dynamic. It depends on input Card Brand type. For example: for AMEX valid cvc only with 4 digits, while for Visa 3 digits only.
.ssn
US social security number, should be 9 digits, don't start with [000,666,9] or contain sequences of the same digits. Ignores some SSNs used in advertising
If you didn't find specific type
for your use case, you can always configure VGSTextInput
with text
type. Then assign any specific rule set to the field and use other configuration attributes. Check more on our code examples below.
Validation Rules
VGS Collect SDK provides pre-build validation rules that you can apply to VGSTextInput
object through it's type
configuration.
Here are some examples of the available rules:
VGSValidationRule
Description
PatternRule
Validates input in scope of matching the regex pattern
CardExpDateRule
Validats input in scope of matching card expiration date format and time range. Supports VGSCardExpDateFormat
date formats validation
PaymentCardRule
Validates input in scope of matching supported card brands, available lengths and checkSum algorithms. Support optional validation of cards that are not defined in SDK - CardBrand.unknown
LuhnCheckRule
Validates input in scope of matching Luhn algorithm
LengthRule
Validates input in scope of min
& max
lengths
LengthMatchRule
Validates input in scope of exact length
NotEmptyRule
Validates input is not empty
How to customize VGSTextInput Validation?
Check examples below on how to create your own validation rules or edit exiting rules that will validate input in VGSTextInput
.
Set custom validation rules:
import { NotEmptyRule, LengthRule, PatternRule } from '@vgs/collect-react-native';
<VGSTextInput
//... other props
validationRules={[
new NotEmptyRule('This field is required'),
new LengthRule(5, 10, 'Length must be between 5 and 10 characters'),
new PatternRule('/^[a-zA-Z]+$/', 'Only letters are allowed'),
]}
/>
Use only Luhn validation for card number field:
<VGSCardInput
//... other props
validationRules={[
new LuhnCheckRule('Card not valid'),
]}
Ignore all default validations:
<VGSCardInput
//... other props
validationRules={[]}
Errors Handling
This guide covers error handling features which will help you to make your App more reliable and recover from errors produced by VGSCollectSDK
.
VGSError
An object the SDK uses to produce errors inside the SDK.
Declaration
class VGSError extends Error
Some of VGSError
provide detailes of error reason in error.details
prop.
Error codes
List of Error codes produced by VGS Collect iOS SDK locally.
Code
Key
Description
1001
InputDataIsNotValid
When input data is not valid, but required to be valid
1101
InputFileNotFound
When can't find file on device
1102
InputFileTypeIsNotSupported
When selected file type not supported
1103
InputFileSizeExceedsTheLimit
When file size is larger then allowed limit
1150
SourceNotAvailable
When can't get access to file source
1400
unexpectedResponseType
When response type is not supported
1470
InvalidVaultConfiguration
When VGSCollect init parameters not valid
1480
invalidConfigurationURL
When VGS configuration URL is not valid
Code example
// Add import
import { VGSError, VGSErrorCode } from '@vgs/collect-react-native';
// Other code here...
const handleSubmit = async () => {
try {
const { status, response } = await collector.submit('/post', 'POST')
} catch (error) {
if (error instanceof VGSError) {
switch (error.code) {
case VGSErrorCode.InputDataIsNotValid:
for (const fieldName in error.details) {
console.error(
`Not valid fieldName: ${fieldName}: ${error.details[fieldName].join(', ')}`
);
}
break;
default:
console.error('VGSError:', error.code, error.message);
}
} else {
console.error('Network or unexpected error:', error);
}
}
Last updated