You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native输入未闭合左括号触发正则语法错误的解决问询

React Native TextInput输入左括号导致应用崩溃问题

问题描述

在React Native应用中,用于API搜索的TextInput组件此前运行正常,但用户输入「14-12(」时,输入左括号「(」瞬间导致应用崩溃。控制台报错:
SyntaxError: Invalid RegExp: Parenthesized expression not closed

相关代码如下:

const [searchTerm, setSearchTerm] = useState("");

// 延迟调用搜索
useEffect(() => {
  const delayDebounceFn = setTimeout(() => {
    (async () => {
      await handleSearch(searchTerm);
    })();
  }, 500);

  return () => clearTimeout(delayDebounceFn);
}, [searchTerm]);

// 处理搜索请求
const handleSearch = async (searchTerm) => {
  const headerOption = {
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${user.token}`,
    },
  };

  setIsSearchLoading(true);

  axiosInstance
    .post(
      `/rest/V2/search`,
      { book_id: bookSku, search_term: searchTerm.toString() },
      headerOption
    )
    .then((response) => {
      if (response.data.length > 0) {
        setSearchResults(response.data[1]);
      }
      setIsSearchLoading(false);
    })
    .catch((error) => {
      setIsSearchLoading(false);
      console.log(
        "Error fetching the search from the server SectionScreen",
        error
      );
    });
};

// TextInput组件
<TextInput
  autoFocus={true}
  style={styles.searchInput}
  placeholder="Enter Search Term"
  onChangeText={(value) => setSearchTerm(value.toString())}
  value={searchTerm}
  returnKeyType="done"
/>

技术版本:

  • React Native: "0.71.8"
  • React: "18.2.0"
  • Expo: "^48.0.0"

问题原因

报错直接指向正则表达式语法错误——未闭合的括号。前端代码本身没有直接用正则处理输入,但API接口接收search_term后,大概率将其作为正则表达式执行匹配操作。(是正则中的特殊分组字符,单独输入会导致正则无法解析,进而触发错误导致应用崩溃。

解决方法

有两个修复方向,优先推荐后端处理:

1. 后端层面修复

  • 检查后端搜索逻辑,不要直接把用户输入当作正则表达式使用。如果必须用正则,先对输入中的正则特殊字符(如(, ), *, +, .等)做转义处理。
  • 或者切换为普通字符串匹配,避开特殊字符的正则语法解析。

2. 前端层面预处理

如果后端暂时无法修改,可在发送请求前转义搜索关键词中的正则特殊字符:

先添加转义函数:

// 转义正则特殊字符
const escapeRegExp = (str) => {
  return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
};

再修改handleSearch中的请求参数:

axiosInstance
  .post(
    `/rest/V2/search`,
    { book_id: bookSku, search_term: escapeRegExp(searchTerm.toString()) },
    headerOption
  )
  // 后续逻辑保持不变

这样用户输入的特殊字符会被转义,不会被后端当作正则语法解析,从而避免崩溃。

内容的提问来源于stack exchange,提问作者Pedro-Goncal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:37:31