Skip to content

Commit

Permalink
Merge pull request #55812 from ikevin127/ikevin127-paymentCardPostcod…
Browse files Browse the repository at this point in the history
…eValidation

[CP Staging] Fix postcode validation for add payment card flow

(cherry picked from commit 6c52815)

(CP triggered by luacmartins)
  • Loading branch information
luacmartins authored and OSBotify committed Jan 28, 2025
1 parent 29c119c commit d6b09b6
Show file tree
Hide file tree
Showing 4 changed files with 159 additions and 91 deletions.
1 change: 1 addition & 0 deletions src/CONST.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3063,6 +3063,7 @@ const CONST = {
CARD_EXPIRATION_DATE: /^(0[1-9]|1[0-2])([^0-9])?([0-9]{4}|([0-9]{2}))$/,
ROOM_NAME: /^#[\p{Ll}0-9-]{1,100}$/u,
DOMAIN_BASE: '^(?:https?:\\/\\/)?(?:www\\.)?([^\\/]+)',
ALPHANUMERIC_WITH_SPACE_AND_HYPHEN: /^[A-Za-z0-9 -]+$/,

// eslint-disable-next-line max-len, no-misleading-character-class
EMOJI: /[\p{Extended_Pictographic}\u200d\u{1f1e6}-\u{1f1ff}\u{1f3fb}-\u{1f3ff}\u{e0020}-\u{e007f}\u20E3\uFE0F]|[#*0-9]\uFE0F?\u20E3/gu,
Expand Down
21 changes: 12 additions & 9 deletions src/components/AddPaymentCard/PaymentCardForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import TextInput from '@components/TextInput';
import TextLink from '@components/TextLink';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import * as ValidationUtils from '@libs/ValidationUtils';
import {getFieldRequiredErrors, isValidAddress, isValidDebitCard, isValidExpirationDate, isValidLegalName, isValidPaymentZipCode, isValidSecurityCode} from '@libs/ValidationUtils';
import CONST from '@src/CONST';
import type {TranslationPaths} from '@src/languages/types';
import ONYXKEYS from '@src/ONYXKEYS';
Expand Down Expand Up @@ -143,30 +143,33 @@ function PaymentCardForm({
const [cardNumber, setCardNumber] = useState('');

const validate = (values: FormOnyxValues<typeof ONYXKEYS.FORMS.ADD_PAYMENT_CARD_FORM>): FormInputErrors<typeof ONYXKEYS.FORMS.ADD_PAYMENT_CARD_FORM> => {
const errors = ValidationUtils.getFieldRequiredErrors(values, REQUIRED_FIELDS);
const errors = getFieldRequiredErrors(values, REQUIRED_FIELDS);

if (values.nameOnCard && !ValidationUtils.isValidLegalName(values.nameOnCard)) {
if (values.nameOnCard && !isValidLegalName(values.nameOnCard)) {
errors.nameOnCard = translate(label.error.nameOnCard);
}

if (values.cardNumber && !ValidationUtils.isValidDebitCard(values.cardNumber.replace(/ /g, ''))) {
if (values.cardNumber && !isValidDebitCard(values.cardNumber.replace(/ /g, ''))) {
errors.cardNumber = translate(label.error.cardNumber);
}

if (values.expirationDate && !ValidationUtils.isValidExpirationDate(values.expirationDate)) {
if (values.expirationDate && !isValidExpirationDate(values.expirationDate)) {
errors.expirationDate = translate(label.error.expirationDate);
}

if (values.securityCode && !ValidationUtils.isValidSecurityCode(values.securityCode)) {
if (values.securityCode && !isValidSecurityCode(values.securityCode)) {
errors.securityCode = translate(label.error.securityCode);
}

if (values.addressStreet && !ValidationUtils.isValidAddress(values.addressStreet)) {
if (values.addressStreet && !isValidAddress(values.addressStreet)) {
errors.addressStreet = translate(label.error.addressStreet);
}

if (values.addressZipCode && !ValidationUtils.isValidZipCode(values.addressZipCode)) {
errors.addressZipCode = translate('bankAccount.error.zipCode');
// If tempered with, this can block users from adding payment cards so
// do not touch unless you are aware of the context.
// See issue: https://github.com/Expensify/App/issues/55493#issuecomment-2616349754
if (values.addressZipCode && !isValidPaymentZipCode(values.addressZipCode)) {
errors.addressZipCode = translate('addPaymentCardPage.error.addressZipCode');
}

if (!values.acceptTerms) {
Expand Down
5 changes: 5 additions & 0 deletions src/libs/ValidationUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,10 @@ function isValidZipCode(zipCode: string): boolean {
return CONST.REGEX.ZIP_CODE.test(zipCode);
}

function isValidPaymentZipCode(zipCode: string): boolean {
return CONST.REGEX.ALPHANUMERIC_WITH_SPACE_AND_HYPHEN.test(zipCode);
}

function isValidSSNLastFour(ssnLast4: string): boolean {
return CONST.REGEX.SSN_LAST_FOUR.test(ssnLast4);
}
Expand Down Expand Up @@ -652,6 +656,7 @@ export {
isValidDebitCard,
isValidIndustryCode,
isValidZipCode,
isValidPaymentZipCode,
isRequiredFulfilled,
getFieldRequiredErrors,
isValidUSPhone,
Expand Down
Loading

0 comments on commit d6b09b6

Please sign in to comment.