Skip to content

Commit e8088b5

Browse files
committed
fix: improve regex matching, update error msgs to contain matched chars
1 parent 47e8147 commit e8088b5

1 file changed

Lines changed: 18 additions & 15 deletions

File tree

apps/web/src/utils/upload.ts

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ function nonVisibleCharChecker(entry: string | undefined) {
6767
if (!entry) {
6868
return null;
6969
}
70-
const nonVisibleCharCheck = /[\u200B-\u200D\uFEFF\u180E]/g.exec(entry);
70+
const nonVisibleCharCheck = /[^\u0009\u000A\u000D\u0020-\u007E\u00C0-\u024F]+/g.exec(entry);
71+
// old regex /[\u200B-\u200D\uFEFF\u180E]/g
7172
return nonVisibleCharCheck;
7273
}
7374

@@ -522,16 +523,16 @@ export namespace Zod3 {
522523
if (regexResultSubject !== null) {
523524
return reject(
524525
new UploadError({
525-
en: `Subject ID at row ${rowNumber} contains non-visible characters`,
526-
fr: `L'ID du sujet à la ligne ${rowNumber} contient des caractères non visibles`
526+
en: `Subject ID at row ${rowNumber} contains non-visible character(s) ${regexResultSubject[0]}`,
527+
fr: `L'ID du sujet à la ligne ${rowNumber} contient des caractères non visible(s) ${regexResultSubject[0]}`
527528
})
528529
);
529530
}
530531
if (regexResultDate !== null) {
531532
return reject(
532533
new UploadError({
533-
en: `Date at row ${rowNumber} contains non-visible characters`,
534-
fr: `Date à la ligne ${rowNumber} contient des caractères non visibles`
534+
en: `Date at row ${rowNumber} contains non-visible character(s) ${regexResultDate[0]}`,
535+
fr: `Date à la ligne ${rowNumber} contient des caractères non visible(s) ${regexResultDate[0]}`
535536
})
536537
);
537538
}
@@ -556,11 +557,12 @@ export namespace Zod3 {
556557
}
557558

558559
//Check for non visible char in every row, return error if present
559-
if (nonVisibleCharChecker(rawValue) !== null) {
560+
const nonVisibleChars = nonVisibleCharChecker(rawValue);
561+
if (nonVisibleChars !== null) {
560562
return reject(
561563
new UploadError({
562-
en: `Value at row ${rowNumber} and column ${key} contains non-visible characters`,
563-
fr: `La valeur à la ligne ${rowNumber} et colonne '${key}' contient des caractères non visibles`
564+
en: `Value at row ${rowNumber} and column ${key} contains non-visible characters ${nonVisibleChars[0]}`,
565+
fr: `La valeur à la ligne ${rowNumber} et colonne '${key}' contient des caractères non visibles ${nonVisibleChars[0]}`
564566
})
565567
);
566568
}
@@ -875,16 +877,16 @@ export namespace Zod4 {
875877
if (regexResultSubject !== null) {
876878
return reject(
877879
new UploadError({
878-
en: `Subject ID at row ${rowNumber} contains non-visible characters`,
879-
fr: `L'ID du sujet à la ligne ${rowNumber} contient des caractères non visibles`
880+
en: `Subject ID at row ${rowNumber} contains non-visible characters ${regexResultSubject[0]}`,
881+
fr: `L'ID du sujet à la ligne ${rowNumber} contient des caractères non visibles ${regexResultSubject[0]}`
880882
})
881883
);
882884
}
883885
if (regexResultDate !== null) {
884886
return reject(
885887
new UploadError({
886-
en: `Date at row ${rowNumber} contains non-visible characters`,
887-
fr: `Date à la ligne ${rowNumber} contient des caractères non visibles`
888+
en: `Date at row ${rowNumber} contains non-visible characters ${regexResultDate[0]}`,
889+
fr: `Date à la ligne ${rowNumber} contient des caractères non visibles ${regexResultDate[0]}`
888890
})
889891
);
890892
}
@@ -906,11 +908,12 @@ export namespace Zod4 {
906908
const rawValue = cell == null ? '' : cell.trim();
907909
if (rawValue === '\n') continue;
908910
// Return error if any non‑visible character is present
909-
if (nonVisibleCharChecker(rawValue) !== null) {
911+
const nonVisibleChars = nonVisibleCharChecker(rawValue);
912+
if (nonVisibleChars !== null) {
910913
return reject(
911914
new UploadError({
912-
en: `Value at row ${rowNumber} and column ${key} contains non-visible characters`,
913-
fr: `La valeur à la ligne ${rowNumber} et colonne '${key}' contient des caractères non visibles`
915+
en: `Value at row ${rowNumber} and column ${key} contains non-visible characters ${nonVisibleChar[0]}`,
916+
fr: `La valeur à la ligne ${rowNumber} et colonne '${key}' contient des caractères non visibles ${nonVisibleChar[0]}`
914917
})
915918
);
916919
}

0 commit comments

Comments
 (0)