驗證是表單處理的關鍵方面,確保使用者輸入遵守特定規則。在本文中,我們將使用電話號碼、信用卡和 CVC 等範例,探索如何透過 React 和 React Native 的正規表示式驗證來建立可重複使用的自訂輸入元件。
目錄
- 為什麼要自訂輸入?
- 開始使用
- 自訂輸入元件
- 使用 zod 新增正規表示式驗證
- 建立表單
- 結論
連結
- 原始碼
- 現場示範
為什麼要自訂輸入?
使用自訂輸入可以讓您:
- 標準化跨表單的驗證邏輯。
- 透過輸入遮罩和清晰的錯誤訊息來增強使用者體驗。
- 在 React 和 React Native 中重複使用元件。
入門
先決條件
確保您安裝了以下相依性:
- 用於表單處理的react-hook-form。
- zod 和 @hookform/resolvers/zod 用於基於模式的驗證。
- react-native-mask-input 用於 React Native 中的屏蔽輸入。
- 用於樣式化的樣式化組件。
npm install react-hook-form zod @hookform/resolvers zod react-native-mask-input styled-components
自訂輸入組件
這是可重複使用的 StyledInput 元件:
React Native 程式碼
import React from "react"; import { Controller, FieldPath, FieldValues, useFormContext, } from "react-hook-form"; import { TextInputProps, View } from "react-native"; import styled from "styled-components/native"; const InputContainer = styled.View` width: 100%; `; const Label = styled.Text` font-size: 16px; color: ${({ theme }) => theme.colors.primary}; `; const InputBase = styled.TextInput` flex: 1; font-size: ${({ theme }) => `${theme.fontSizes.base}px`}; color: ${({ theme }) => theme.colors.primary}; height: ${({ theme }) => `${theme.inputSizes.base}px`}; border: 1px solid ${({ theme }) => theme.colors.border}; border-radius: 8px; padding: 8px; `; const ErrorMessage = styled.Text` font-size: 12px; color: ${({ theme }) => theme.colors.error}; `; interface StyledInputProps<tfieldvalues extends fieldvalues> extends TextInputProps { label: string; name: FieldPath<tfieldvalues>; } export function StyledInput<tfieldvalues extends fieldvalues>({ label, name, ...inputProps }: StyledInputProps<tfieldvalues>) { const { control, formState } = useFormContext<tfieldvalues>(); const { errors } = formState; const errorMessage = errors[name]?.message as string | undefined; return ( <inputcontainer> <label>{label}</label> <controller control="{control}" name="{name}" render="{({" field: onchange onblur value> ( <inputbase onblur="{onBlur}" onchangetext="{onChange}" value="{value}"></inputbase> )} /> {errorMessage && <errormessage>{errorMessage}</errormessage>} </controller></inputcontainer> ); } </tfieldvalues></tfieldvalues></tfieldvalues></tfieldvalues></tfieldvalues>
反應程式碼
套用相同的邏輯,但將 TextInput 替換為 HTML 的 並相應地設定樣式。
使用 zod 新增正規表示式驗證
為電話號碼和信用卡等輸入定義遮罩和驗證器:
import * as zod from "zod"; import { Mask } from "react-native-mask-input"; const turkishPhone = { mask: [ "+", "(", "9", "0", ")", " ", /\d/, /\d/, /\d/, " ", /\d/, /\d/, /\d/, "-", /\d/, /\d/, "-", /\d/, /\d/, ], validator: /^\+\(90\) \d{3} \d{3}-\d{2}-\d{2}$/, placeholder: "+(90) 555 555-55-55", }; const creditCard = { mask: [ /\d/, /\d/, /\d/, /\d/, "-", /\d/, /\d/, /\d/, /\d/, "-", /\d/, /\d/, /\d/, /\d/, "-", /\d/, /\d/, /\d/, /\d/, ], validator: /^\d{4}-\d{4}-\d{4}-\d{4}$/, placeholder: "4242-4242-4242-4242", }; const cvc = { mask: [/\d/, /\d/, /\d/], validator: /^\d{3}$/, placeholder: "123", }; const schema = zod.object({ phone: zod.string().regex(turkishPhone.validator, "Invalid phone number"), creditCard: zod .string() .regex(creditCard.validator, "Invalid credit card number"), cvc: zod.string().regex(cvc.validator, "Invalid CVC"), });
建構表單
使用react-hook-form和zod進行驗證:
import { FormProvider, useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; export default function FormScreen() { const form = useForm({ resolver: zodResolver(schema), mode: "onBlur", }); return ( <formprovider> <styledinput name="phone" label="Phone" placeholder="{turkishPhone.placeholder}"></styledinput> <styledinput name="creditCard" label="Credit Card" placeholder="{creditCard.placeholder}"></styledinput> <styledinput name="cvc" label="CVC" placeholder="{cvc.placeholder}"></styledinput> <button type="submit">Submit</button> </formprovider> ); }
結論
透過使用正規表示式驗證建立可重複使用的自訂輸入,您可以簡化表單處理並保持項目之間的一致性。這些元件在 React 和 React Native 中無縫運作,提供了出色的使用者體驗。
您可以隨意自訂遮罩、驗證器和樣式以滿足您的應用程式的要求。快樂編碼!
以上是在 React 和 React Native 中為正規表示式驗證建立自訂輸入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

10款趣味橫生的jQuery遊戲插件,讓您的網站更具吸引力,提升用戶粘性!雖然Flash仍然是開發休閒網頁遊戲的最佳軟件,但jQuery也能創造出令人驚喜的效果,雖然無法與純動作Flash遊戲媲美,但在某些情況下,您也能在瀏覽器中獲得意想不到的樂趣。 jQuery井字棋遊戲 遊戲編程的“Hello world”,現在有了jQuery版本。 源碼 jQuery瘋狂填詞遊戲 這是一個填空遊戲,由於不知道單詞的上下文,可能會產生一些古怪的結果。 源碼 jQuery掃雷遊戲

本教程演示瞭如何使用jQuery創建迷人的視差背景效果。 我們將構建一個帶有分層圖像的標題橫幅,從而創造出令人驚嘆的視覺深度。 更新的插件可與JQuery 1.6.4及更高版本一起使用。 下載

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

Matter.js是一個用JavaScript編寫的2D剛體物理引擎。此庫可以幫助您輕鬆地在瀏覽器中模擬2D物理。它提供了許多功能,例如創建剛體並為其分配質量、面積或密度等物理屬性的能力。您還可以模擬不同類型的碰撞和力,例如重力摩擦力。 Matter.js支持所有主流瀏覽器。此外,它也適用於移動設備,因為它可以檢測觸摸並具有響應能力。所有這些功能都使其值得您投入時間學習如何使用該引擎,因為這樣您就可以輕鬆創建基於物理的2D遊戲或模擬。在本教程中,我將介紹此庫的基礎知識,包括其安裝和用法,並提供一

本文演示瞭如何使用jQuery和ajax自動每5秒自動刷新DIV的內容。 該示例從RSS提要中獲取並顯示了最新的博客文章以及最後的刷新時間戳。 加載圖像是選擇


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

記事本++7.3.1
好用且免費的程式碼編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),