正则魔法:解码 return /^\d+$/.test(text) ? text : ‘0‘ 的秘密

news2025/4/21 15:56:08

🚀 正则魔法:解码 return /^\d+$/.test(text) ? text : '0' 的秘密 🌟

嘿,技术探险家们!👋 今天我们要破解一段看似简单的代码:return /^\d+$/.test(text) ? text : '0'。它藏在一个 Vue 前端组件中,与后端的分页查询接口息息相关。这篇文章将带你深入剖析它的作用,结合前后端交互,揭开正则表达式的“魔法”!还有流程图助阵,快跟我一起探索吧!💪


🎯 第一幕:代码的“藏身之处”

问题起源

我在调试一个邀请码管理页面(invite-code-list.vue),发现前端向后端发送分页请求时,有个方法让我眼前一亮:

private getAllowInviteValue(text: string): string {
    const map: { [key: string]: string } = {
        '不允许': '0',
        '允许1级': '1',
        '允许2级': '2',
        '允许不限层级': '127',
        '允许不限': '127'
    }
    const value = map[text]
    if (value) {
        return value
    }
    // 如果输入的是数字,直接返回
    return /^\d+$/.test(text) ? text : '0'
}

这段代码出现在 fetchInviteCodeList 中,当搜索字段是 allowInvite 时,它会处理搜索值。咦?这个正则表达式和三元运算符是干嘛的?🤔


🔍 第二幕:正则与逻辑的解密

代码分析

让我们拆解 return /^\d+$/.test(text) ? text : '0'

  • /^\d+$/
    • 这是一个正则表达式:
      • ^:字符串开头。
      • \d:匹配任意数字(0-9)。
      • +:匹配一个或多个数字。
      • $:字符串结尾。
    • 含义:检查 text 是否是纯数字字符串(如 "123"),不含字母、空格或其他字符。
  • .test(text)
    • 测试 text 是否符合正则规则,返回 truefalse
  • ?:
    • 三元运算符:条件 ? 值1 : 值2
    • 如果 ^\d+$/.test(text)true,返回 text;否则返回 '0'
完整逻辑

结合整个方法:

  1. 映射表检查
    • 如果 text'不允许''允许1级' 等,返回对应的数字(如 '0''1')。
  2. 正则兜底
    • 如果 text 不在映射表中:
      • 检查是否是纯数字(如 '123'),如果是,直接返回。
      • 否则,返回默认值 '0'
示例
  • text = '不允许' → 返回 '0'(映射表匹配)。
  • text = '3' → 返回 '3'(正则是数字)。
  • text = 'abc' → 返回 '0'(非数字)。
  • text = '' → 返回 '0'(空字符串)。

🐞 第三幕:它在前端的作用

上下文:邀请码搜索

fetchInviteCodeList 中:

private async fetchInviteCodeList() {
    const { page, size, field, value } = this.listQuery
    let searchValue = value
    if (field === 'allowInvite' && value) {
        searchValue = this.getAllowInviteValue(value)
    }
    const params = { page, size, field, value: searchValue }
    const response = await getInviteCodeListByInvitor(params)
    // ... 处理响应 ...
}
  • 场景
    • 用户在搜索框输入 value,选择 fieldallowInvite(转邀请)。
    • getAllowInviteValue 将输入转换为后端能识别的数字。
  • 目的
    • 后端期望 allowInvite 是数字(如 0 表示不允许,1 表示允许1级)。
    • 前端通过映射表和正则,确保 value 是有效数字。
Mermaid 流程图:搜索值转换
用户输入: value='允许1级'
field='allowInvite'
getAllowInviteValue
在映射表中?
返回 '1'
是纯数字?
返回 text
返回 '0'
发送请求: value='1'

🔧 第四幕:前后端交互的桥梁

后端视角

后端接口(假设):

@PostMapping("/listInviteCodeByPageWithSearch")
public BaseResult listInviteCodeByPageWithSearch(@RequestBody PageWithSearch pageWithSearch) {
    // ... 处理 pageWithSearch ...
}

PageWithSearch

public class PageWithSearch extends BasePage {
    private String field;
    private String value;
    // ... 其他字段 ...
}
  • 前端参数
    • listQuery 中的 fieldvalue 直接映射到 PageWithSearch
  • 后端处理
    • 如果 field='allowInvite'value 应该是数字字符串(如 '0''1')。
    • 服务层可能将 value 转为 Integer 或直接用于查询。

为什么需要这个转换?

  • 数据一致性
    • 后端数据库中 allowInvite 可能存储为 int(如 01127)。
    • 前端输入可能是文字(如 '允许1级')或数字(如 '3')。
  • 容错性
    • 用户可能输入非法值(如 'abc'),getAllowInviteValue 保证返回有效默认值 '0'

🌈 第五幕:经验与反思

学到了啥?💡

  1. 正则的妙用
    • /^\d+$/ 简洁高效,确保输入是纯数字。
  2. 前后端协作
    • 前端提前转换数据,减轻后端负担。
  3. 容错设计
    • 映射表 + 正则兜底,处理各种输入场景。

小建议 🌟

  • 前端校验
    • 加个输入提示,告诉用户 allowInvite 支持哪些值。
    if (field === 'allowInvite' && !/^\d+$/.test(value) && !map[value]) {
        this.$message.warning('转邀请请输入数字或有效选项');
    }
    
  • 后端验证
    • PageWithSearch 中加校验:
      @Pattern(regexp = "^\\d+$", message = "转邀请值必须是数字")
      private String value;
      

🎬 尾声

return /^\d+$/.test(text) ? text : '0' 到前后端交互的桥梁,这段代码虽小,却承载了数据转换的重任。它让我对正则表达式和容错设计有了新认识。希望这篇博客能帮你在开发中更好地处理类似场景!有问题欢迎留言,咱们一起聊技术!✌️

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2320483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于BClinux8部署Ceph 19.2(squid)集群

#作者&#xff1a;闫乾苓 文章目录 1.版本选择Ceph版本发布历史目前官方在维护的版本 2.部署方法3.服务器规划4.前置配置4.1系统更新4.2配置hosts cat >> /etc/hosts << EOFssh-keygenssh-copy-id ceph01ssh-copy-id ceph02ssh-copy-id ceph034.5 Python34.6 Syst…

CVPR2025 | 对抗样本智能安全方向论文汇总 | 持续更新中~

汇总结果来源&#xff1a;CVPR 2025 Accepted Papers 若文中出现的 论文链接 和 GitHub链接 点不开&#xff0c;则说明还未公布&#xff0c;在公布后笔者会及时添加. 若笔者未及时添加&#xff0c;欢迎读者告知. 文章根据题目关键词搜索&#xff0c;可能会有遗漏. 若笔者出现…

磁盘清理工具-TreeSize Free介绍

TreeSizeFree是一个磁盘空间管理工具&#xff0c;主要用于分析磁盘使用情况&#xff0c;帮助用户找到占用空间大的文件和文件夹: 特点&#xff1a;按大小排序&#xff1a;快速找到占用空间最大的文件或文件夹 一般可以删除: 扫描 C:\Users\XXX\AppData\Local\Temp 或 C:\Window…

c#知识点补充2

1.非静态类能否调用静态方法可以 2.对string类型扩展方法&#xff0c;如何进行 类用静态类&#xff0c;参数是this 调用如下 3.out的用法 一定要给a赋值 这种写法不行 这样才行 4.匿名类 5.委托的使用 无论是匿名委托&#xff0c;还是具命委托&#xff0c;委托实例化后一定要…

力扣45.跳跃游戏

45. 跳跃游戏 II - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; #include<vector> class Solution {public:int jump(vector<int>& nums) {int ans[10005] ;memset(ans,1e4,sizeof(ans));ans[0]0;for(int i0;i<nums.size();i){for(int j1;j…

MacOS安装 nextcloud 的 Virtual File System

需求 在Mac上安装next cloud实现类似 OneDrive 那样&#xff0c;文件直接保存在服务器&#xff0c;需要再下载到本地。 方法 在 官网下载Download for desktop&#xff0c;注意要下对版本&#xff0c;千万别下 Mac OS默认的那个。 安装了登录在配置过程中千万不要设置任何同…

C/C++蓝桥杯算法真题打卡(Day6)

一、P8615 [蓝桥杯 2014 国 C] 拼接平方数 - 洛谷 方法一&#xff1a;算法代码&#xff08;字符串分割法&#xff09; #include<bits/stdc.h> // 包含标准库中的所有头文件&#xff0c;方便编程 using namespace std; // 使用标准命名空间&#xff0c;避免每次调用…

ORACLE RAC ASM双存储架构下存储部分LUN异常的处理

早上接到用户电话&#xff0c;出现有表空间不足的告警&#xff0c;事实上此环境经常巡检并且有告警系统&#xff0c;一开始就带着有所疑惑的心理&#xff0c;结果同事在扩大表空间时&#xff0c;遇到报错 ORA-15401/ORA-17505,提示ASM空间满了&#xff1a; ALERT日志&#xff1…

others-rustdesk远程

title: others-rustdesk远程 categories: Others tags: [others, 远程] date: 2025-03-19 10:19:34 comments: false mathjax: true toc: true others-rustdesk远程, 替代 todesk 的解决方案 前篇 官方 服务器 - https://rustdesk.com/docs/zh-cn/self-host/rustdesk-server-o…

C++基础 [八] - list的使用与模拟实现

目录 list的介绍 List的迭代器失效问题 List中sort的效率测试 list 容器的模拟实现思想 模块分析 作用分析 list_node类设计 list 的迭代器类设计 迭代器类--存在的意义 迭代器类--模拟实现 模板参数 和 成员变量 构造函数 * 运算符的重载 运算符的重载 -- 运…

使用excel.EasyExcel实现导出有自定义样式模板的excel数据文件,粘贴即用!!!

客户要求导出的excel文件是有好看格式的&#xff0c;当然本文举例模板文件比较简单&#xff0c;内容丰富的模板可以自行设置&#xff0c;话不多说&#xff0c;第一步设置一个"好看"的excel文件模板 上面要注意的地方是{.变量名} &#xff0c;这里的变量名对应的就是…

Spring Boot 集成 Elasticsearch怎样在不启动es的情况下正常启动服务

解释 在spingboot 集成es客户端后&#xff0c;每当服务启动时&#xff0c;服务默认都会查看es中是否已经创建了对应的索引&#xff0c;如果没有索引则创建。基于上面的规则我们可以通过配置不自动创建索引来达到在没有es服务的情况下正常启动服务。 解决办法 在entity类的Docu…

JVM常见概念之条件移动

问题 当我们有分支频率数据时&#xff0c;有什么有趣的技巧可以做吗&#xff1f;什么是条件移动&#xff1f; 基础知识 如果您需要在来自一个分支的两个结果之间进行选择&#xff0c;那么您可以在 ISA 级别做两件不同的事情。 首先&#xff0c;你可以创建一个分支&#xff…

Android AI ChatBot-v1.6.3-28-开心版[免登录使用GPT-4o和DeepSeek]

Android AI ChatBot- 链接&#xff1a;https://pan.xunlei.com/s/VOLi1Ua071S6QZBGixcVL5eeA1?pwdp3tt# 免登录使用GPT-4o和DeepSeek

集成学习(上):Bagging集成方法

一、什么是集成学习&#xff1f; 在机器学习的世界里&#xff0c;没有哪个模型是完美无缺的。就像古希腊神话中的"盲人摸象"&#xff0c;单个模型往往只能捕捉到数据特征的某个侧面。但当我们把多个模型的智慧集合起来&#xff0c;就能像拼图一样还原出完整的真相&a…

DeepSeek R1 本地部署指南 (3) - 更换本地部署模型 Windows/macOS 通用

0.准备 完成 Windows 或 macOS 安装&#xff1a; DeepSeek R1 本地部署指南 (1) - Windows 本地部署-CSDN博客 DeepSeek R1 本地部署指南 (2) - macOS 本地部署-CSDN博客 以下内容 Windows 和 macOS 命令执行相同&#xff1a; Windows 管理员启动&#xff1a;命令提示符 CMD ma…

【TI MSPM0】Timer学习

一、计数器 加法计数器&#xff1a;每进入一个脉冲&#xff0c;就加一减法计算器&#xff1a;每进入一个脉冲&#xff0c;就减一 当计数器减到0&#xff0c;触发中断 1.最短计时时间 当时钟周期为1khz时&#xff0c;最短计时时间为1ms&#xff0c;最长计时时间为65535ms 当时…

Windows部署deepseek R1训练数据后通过AnythingLLM当服务器创建问答页面

如果要了解Windows部署Ollama 、deepseek R1请看我上一篇内容。 这是接上一篇的。 AnythingLLM是一个开源的全栈AI客户端&#xff0c;支持本地部署和API集成。它可以将任何文档或内容转化为上下文&#xff0c;供各种语言模型&#xff08;LLM&#xff09;在对话中使用。以下是…

信奥赛CSP-J复赛集训(模拟算法专题)(27):P5016 [NOIP 2018 普及组] 龙虎斗

信奥赛CSP-J复赛集训(模拟算法专题)(27):P5016 [NOIP 2018 普及组] 龙虎斗 题目背景 NOIP2018 普及组 T2 题目描述 轩轩和凯凯正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有 n n n 个兵营(自左至右编号 1 ∼ n 1 \sim n 1∼n),相邻编号的兵营之间…

多模态大模型常见问题

1.视觉编码器和 LLM 连接时&#xff0c;使用 BLIP2中 Q-Former那种复杂的 Adaptor 好还是 LLaVA中简单的 MLP 好&#xff0c;说说各自的优缺点&#xff1f; Q-Former&#xff08;BLIP2&#xff09;&#xff1a; 优点&#xff1a;Q-Former 通过查询机制有效融合了视觉和语言特征…