1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-19 22:58:07 +02:00

Let be more tolerant with predefined phone number format

The long US phone number format should be '(999) 999-9999' but the parenthesis
can be omitted or the space replaced with a dash, ...
This commit is contained in:
Calixte Denizet 2025-01-03 19:00:33 +01:00
parent 3001264801
commit 3dd8752283
2 changed files with 98 additions and 11 deletions

View file

@ -465,22 +465,22 @@ class AForm {
// specific to the format because the user could enter 1234567 when the
// format is 999-9999.
const simplifiedFormatStr = cMask.replaceAll(/[^9AOX]/g, "");
this.#AFSpecial_KeystrokeEx_helper(simplifiedFormatStr, false);
this.#AFSpecial_KeystrokeEx_helper(simplifiedFormatStr, null, false);
if (event.rc) {
return;
}
event.rc = true;
this.#AFSpecial_KeystrokeEx_helper(cMask, true);
this.#AFSpecial_KeystrokeEx_helper(cMask, null, true);
}
#AFSpecial_KeystrokeEx_helper(cMask, warn) {
#AFSpecial_KeystrokeEx_helper(cMask, value, warn) {
if (!cMask) {
return;
}
const event = globalThis.event;
const value = this.AFMergeChange(event);
value ||= this.AFMergeChange(event);
if (!value) {
return;
}
@ -563,7 +563,8 @@ class AForm {
const event = globalThis.event;
psf = this.AFMakeNumber(psf);
let formatStr;
let value = this.AFMergeChange(event);
let formatStr, secondFormatStr;
switch (psf) {
case 0:
formatStr = "99999";
@ -572,11 +573,8 @@ class AForm {
formatStr = "99999-9999";
break;
case 2:
const value = this.AFMergeChange(event);
formatStr =
value.startsWith("(") || (value.length > 7 && /^\p{N}+$/.test(value))
? "(999) 999-9999"
: "999-9999";
formatStr = "999-9999";
secondFormatStr = "(999) 999-9999";
break;
case 3:
formatStr = "999-99-9999";
@ -584,8 +582,36 @@ class AForm {
default:
throw new Error("Invalid psf in AFSpecial_Keystroke");
}
const formats = secondFormatStr
? [formatStr, secondFormatStr]
: [formatStr];
for (const format of formats) {
this.#AFSpecial_KeystrokeEx_helper(format, value, false);
if (event.rc) {
return;
}
event.rc = true;
}
this.AFSpecial_KeystrokeEx(formatStr);
const re = /([-()]|\s)+/g;
value = value.replaceAll(re, "");
for (const format of formats) {
this.#AFSpecial_KeystrokeEx_helper(
format.replaceAll(re, ""),
value,
false
);
if (event.rc) {
return;
}
event.rc = true;
}
this.AFSpecial_KeystrokeEx(
((secondFormatStr && value.match(/\d/g)) || []).length > 7
? secondFormatStr
: formatStr
);
}
AFTime_FormatEx(cFormat) {