簡體   English   中英

使用 React Formik 對特定值進行正則表達式驗證

[英]Regex validation for a specific value with React Formik

首先,我想驗證該字段,如果用戶鍵入此字段中不存在的字符(例如): /[ùûüÿ€'“”«»–àâæçéèêëïîôœ]/觸發錯誤消息。

其次,我想將 3 個變量與正則表達式驗證連接起來。

這是代碼:

const validChars1 = /[A-Za-z0-9`~!@#$%^&*()+={};:’”,./<>?| \\\\\ [\]]*$/;
const validChars2 = /[ùûüÿ€’“”«»–àâæçéèêëïîôœ]/;
const validChars3 = /[áéíóúüñ¿]/;
const mainValidator = validChars1 + validChars2 + validChars3;
const validationSchema = yup.object({
    primaryInformation: yup.object({
      externalEmployeeId: yup
        .string()
        .matches(mainValidator, "Please enter valid name")
        .required(intl.get("userManagement.editor.requiredFieldError"))

//Error: Operator '+' cannot be applied to types 'RegExp' and 'RegExp'

請幫我解決這個問題,謝謝!

雖然你不能像這樣用普通的 JavaScript 編寫正則表達式,你可以這樣做

const validChars1 = /[A-Za-z0-9`~!@#$%^&*()+={};:’”,./<>?| \\\\\ [\]]*$/;
const validChars2 = /[ùûüÿ€’“”«»–àâæçéèêëïîôœ]/;
const validChars3 = /[áéíóúüñ¿]/;
const mainValidator = new RegExp(
  validChars1.source 
  + validChars2.source 
  + validChars3.source
);
// etc...

不過,您的正則表達式還有另一個問題:第一個以與輸入末尾匹配的$斷言結尾。 /a$b/形式的 RegExp 永遠不會成功,因為$b是矛盾的。 "a""ab"都不能滿足它。 對於"a"$會成功,但b會失敗,反之對於"ab"

如果您想在不訴諸源字符串操作的情況下編寫 RegExp,您可以查看compose-regexp ,它可以讓您編寫如下代碼:

import {sequence} from 'compose-regexp'

const validChars1 = /[A-Za-z0-9`~!@#$%^&*()+={};:’”,./<>?| \\\\\ [\]]*/;
const validChars2 = /[ùûüÿ€’“”«»–àâæçéèêëïîôœ]/;
const validChars3 = /[áéíóúüñ¿]/;
const mainValidator = sequence(validChars1, validChars2, validChars3);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM