diff --git a/src/CONST.js b/src/CONST.js index 418d5bc1ad6b..a99bb0cfd713 100755 --- a/src/CONST.js +++ b/src/CONST.js @@ -823,6 +823,7 @@ const CONST = { PHONE_E164_PLUS: /^\+?[1-9]\d{1,14}$/, PHONE_WITH_SPECIAL_CHARS: /^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$/, ALPHABETIC_CHARS: /[a-zA-Z]+/, + ALPHABETIC_CHARS_WITH_NUMBER: /^[a-zA-Z0-9 ]*$/, POSITIVE_INTEGER: /^\d+$/, NON_ALPHA_NUMERIC: /[^A-Za-z0-9+]/g, PO_BOX: /\b[P|p]?(OST|ost)?\.?\s*[O|o|0]?(ffice|FFICE)?\.?\s*[B|b][O|o|0]?[X|x]?\.?\s+[#]?(\d+)\b/, diff --git a/src/languages/en.js b/src/languages/en.js index 209f0f70fa1e..13e7af912018 100755 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -622,6 +622,7 @@ export default { error: { dateShouldBeBefore: ({dateString}) => `Date should be before ${dateString}.`, dateShouldBeAfter: ({dateString}) => `Date should be after ${dateString}.`, + hasInvalidCharacter: 'Name can only include letters and numbers.', }, }, resendValidationForm: { diff --git a/src/languages/es.js b/src/languages/es.js index 89679622b719..d35147b5a406 100644 --- a/src/languages/es.js +++ b/src/languages/es.js @@ -621,6 +621,7 @@ export default { error: { dateShouldBeBefore: ({dateString}) => `La fecha debe ser anterior a ${dateString}.`, dateShouldBeAfter: ({dateString}) => `La fecha debe ser posterior a ${dateString}.`, + hasInvalidCharacter: 'El nombre solo puede contener letras y nĂºmeros.', }, }, resendValidationForm: { diff --git a/src/libs/ValidationUtils.js b/src/libs/ValidationUtils.js index f2e35941edc4..bad46507eca9 100644 --- a/src/libs/ValidationUtils.js +++ b/src/libs/ValidationUtils.js @@ -358,6 +358,16 @@ function isValidDisplayName(name) { return !name.includes(',') && !name.includes(';'); } +/** + * Checks that the provided legal name doesn't contain special characters + * + * @param {String} name + * @returns {Boolean} + */ +function isValidLegalName(name) { + return CONST.REGEX.ALPHABETIC_CHARS_WITH_NUMBER.test(name); +} + /** * Checks if the provided string includes any of the provided reserved words * @@ -449,5 +459,6 @@ export { isValidTaxID, isValidValidateCode, isValidDisplayName, + isValidLegalName, doesContainReservedWord, }; diff --git a/src/pages/settings/Profile/PersonalDetails/LegalNamePage.js b/src/pages/settings/Profile/PersonalDetails/LegalNamePage.js index dee460123f1e..703be9de06ae 100644 --- a/src/pages/settings/Profile/PersonalDetails/LegalNamePage.js +++ b/src/pages/settings/Profile/PersonalDetails/LegalNamePage.js @@ -66,14 +66,14 @@ class LegalNamePage extends Component { validate(values) { const errors = {}; - if (!ValidationUtils.isValidDisplayName(values.legalFirstName)) { - errors.legalFirstName = this.props.translate('personalDetails.error.hasInvalidCharacter'); + if (!ValidationUtils.isValidLegalName(values.legalFirstName)) { + errors.legalFirstName = this.props.translate('privatePersonalDetails.error.hasInvalidCharacter'); } else if (_.isEmpty(values.legalFirstName)) { errors.legalFirstName = this.props.translate('common.error.fieldRequired'); } - if (!ValidationUtils.isValidDisplayName(values.legalLastName)) { - errors.legalLastName = this.props.translate('personalDetails.error.hasInvalidCharacter'); + if (!ValidationUtils.isValidLegalName(values.legalLastName)) { + errors.legalLastName = this.props.translate('privatePersonalDetails.error.hasInvalidCharacter'); } else if (_.isEmpty(values.legalLastName)) { errors.legalLastName = this.props.translate('common.error.fieldRequired'); }