0

0

在 React 和 React Native 中为正则表达式验证创建自定义输入

花韻仙語

花韻仙語

发布时间:2025-01-13 08:01:58

|

1198人浏览过

|

来源于php中文网

原创

在 react 和 react native 中为正则表达式验证创建自定义输入

表单验证是确保用户输入符合特定规范的关键步骤。本文将通过React和React Native中的正则表达式验证,构建可复用的自定义输入组件,并以电话号码、信用卡和CVC码为例进行说明。

目录

  • 为什么需要自定义输入组件?
  • 开始之前
  • 自定义输入组件
  • 使用Zod进行正则表达式验证
  • 构建表单
  • 总结

链接

  • 源代码
  • 在线演示

为什么需要自定义输入组件?

自定义输入组件的优势在于:

  • 跨表单标准化验证逻辑。
  • 通过输入掩码和清晰的错误提示提升用户体验。
  • 组件在React和React Native中可复用。

开始之前

前提条件

请确保已安装以下依赖项:

  • react-hook-form 用于表单处理。
  • zod@hookform/resolvers/zod 用于基于模式的验证。
  • react-native-mask-input 用于React Native的输入掩码。
  • styled-components 用于样式化。
npm install react-hook-form zod @hookform/resolvers zod react-native-mask-input styled-components

自定义输入组件

下面是一个可复用的StyledInput组件:

React Native 代码

import React from "react";
import { Controller, 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> extends TextInputProps {
  label: string;
  name: string;
}

export function StyledInput>({
  label,
  name,
  ...inputProps
}: StyledInputProps) {
  const { control, formState } = useFormContext();
  const { errors } = formState;
  const errorMessage = errors[name]?.message;

  return (
    
      
       (
          
        )}
      />
      {errorMessage && {errorMessage}}
    
  );
}

React 代码

React代码逻辑相同,只需将TextInput替换为HTML的元素,并调整样式。

Fotor AI Face Generator
Fotor AI Face Generator

Fotor 平台的在线 AI 头像生成器

下载

使用Zod进行正则表达式验证

为电话号码和信用卡等输入定义掩码和验证器:

import * as zod from "zod";
import { mask } from "react-native-mask-input"; //仅在React Native中使用

const turkishPhone = {
  mask: ["+", "(", "9", "0", ")", " ", /\d/, /\d/, /\d/, " ", /\d/, /\d/, /\d/, "-", /\d/, /\d/, "-", /\d/, /\d/], //仅在React Native中使用
  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/], //仅在React Native中使用
  validator: /^\d{4}-\d{4}-\d{4}-\d{4}$/,
  placeholder: "4242-4242-4242-4242",
};

const cvc = {
  mask: [/\d/, /\d/, /\d/], //仅在React Native中使用
  validator: /^\d{3}$/,
  placeholder: "123",
};

const schema = zod.object({
  phone: zod.string().regex(turkishPhone.validator, "无效的电话号码"),
  creditCard: zod.string().regex(creditCard.validator, "无效的信用卡号码"),
  cvc: zod.string().regex(cvc.validator, "无效的CVC码"),
});

构建表单

使用react-hook-formzod进行验证:

import { FormProvider, useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import { StyledInput } from "./StyledInput"; //导入自定义组件

export default function FormScreen() {
  const form = useForm({
    resolver: zodResolver(schema),
    mode: "onBlur",
  });

  return (
    
      
console.log(data))}> {/* React Native: 使用mask属性 */} {/* React Native: 使用mask属性 */} {/* React Native: 使用mask属性 */}
); }

总结

通过创建可复用的自定义输入组件并结合正则表达式验证,可以显著简化表单处理流程,并确保应用程序的一致性。这些组件在React和React Native中都能良好运行,并提供更佳的用户体验。 您可以根据应用需求自定义掩码、验证器和样式。 祝您编码愉快!

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

508

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

247

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

726

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

209

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

343

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

230

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

527

2023.12.06

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

150

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号