Skip to content

[Due for payment 2026-08-19] Deposit bank account flow rejects valid phone numbers outside the US and Canada #97806

Description

@mountiny

Problem

The phone number step in the deposit bank account flow (AddPersonalBankAccountPage) validates the number twice. It runs isValidPhoneNumber() on the number with the country code appended, and it also runs isValidNANPPhone() on the E.164 formatted number.

isValidNANPPhone() only accepts numbers that parse to a North American Numbering Plan region: US, PR, GU, VI, AS, MP, and CA. Any other region is rejected.

This flow is the international deposit account flow, so the account holder can live outside North America. A user with a valid non NANP phone number, for example +44 20 7123 4567 or +61 2 5550 1234, sees Please enter a valid phone number and cannot continue. The number is valid, so the error is wrong and there is no way past the step.

The NANP check came from Remove US-only phone validation from InternationalDepositAccount flow, which fixed Canadian phone numbers rejected in deposit-only bank account setup by widening the old US only check to all of NANP. Widening it to NANP fixed Canada but kept the rest of the world blocked.

Solution

Keep isValidPhoneNumber() as the only phone check in this step. It uses libphonenumber's possible check, so it accepts a valid number from any country and still rejects malformed input.

Remove isValidNANPPhone() from ValidationUtils. This step is its only caller. The genuinely US only callers use isValidUSPhone() and stay unchanged.

Steps to reproduce

  1. Log in to any account.
  2. Go to Account > Wallet.
  3. Tap Add bank account > Get reimbursed.
  4. Continue to the phone number step.
  5. Enter a valid phone number from outside the US and Canada, for example +44 20 7123 4567.
  6. Note that the field shows Please enter a valid phone number and the step cannot be completed.

Expected result

The step accepts any valid phone number, whatever the country.

Actual result

The step rejects every valid phone number outside the North American Numbering Plan.

Platforms

All platforms. The validation runs in shared code.

Issue OwnerCurrent Issue Owner: @mallenexpensify

Metadata

Metadata

Labels

Awaiting PaymentAuto-added when associated PR is deployed to productionDailyKSv2EngineeringInternalRequires API changes or must be handled by Expensify staffOverdue

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions