gpt4 book ai didi

javascript - 我们可以使用正则表达式一次解析多个规则吗?

转载 作者:行者123 更新时间:2023-11-29 10:31:03 24 4
gpt4 key购买 nike

我需要阻止一些用户输入交互,我的首要任务是立即 regex

我会首先尽可能地写出我需要完成的,然后我会发布我为完成其中大部分而编写的代码,但仍然不完美...

  • 取字符串
  • 不允许它以空格开始输入
  • 不允许连续多个空格
  • 不允许多个连续
  • 不允许多个撇号
  • 允许后面的字符 [a-z] '.
  • 不允许字符串跨越 14 个字符

现在,这是我的代码:

this.name = this.name
.replace(/^[\s]+/, '') // prevent starting with space
.replace(/\s\s+/, ' ') // prevent multiplace spaces
.replace(/\.\./, '.') // prevent multiple dots
.replace(/''/, '\'') // prevent multiple apostrophies
.replace(/[^ a-z'.]/i, '') // allowed
.toUpperCase() // transform
.substring(0, 14) // do not allow more than 14 characters

问题:

  • 我们能否以及如果可以,如何在单个替换中完成所有这些或大部分这些正则表达式规则?

  • 我如何修复/改进我的正则表达式规则以不允许超过单个 ,我这样做是为了不允许连续输入,但用户可以使用两个点,例如M.G.K - 即使我只想在整个字符串中允许单个 . 条目?

  • 与上面相同,但对于 '(撇号)?

最佳答案

将所有内容“塞进”一个正则表达式替换操作的第一个要求很容易实现,因为您需要做的所有替换都使用您匹配的字符。您可以使用 .replace(/^\s+|(\s)\s+|(\.)\.|(')'|[^ a-z'.]+/ig, '$1$2$3' ),看这个 regex demo .

详情

  • ^\s+ - 字符串开头 (^),然后是 1+ 个空格
  • | - 或者
  • (\s)\s+ - 捕获到第 1 组的单个空格,然后是 1+ 个空格字符
  • | - 或者
  • (\.)\. - . 捕获到第 2 组,然后是 .
  • | - 或者
  • (')' - ' 捕获到第 3 组,然后是 '
  • | - 或者
  • [^ a-z'.]+ - 除了空格、ASCII 字母、'. 之外的 1 个或多个字符。

/i修饰符使a-z以不区分大小写的方式匹配,g启用多重匹配。 $1 引用组 1 中的值,$2 引用组 2 中的值,$3 引用组 3 中的值。请注意,如果它们不匹配,则组中的这些值是空字符串,因此我们可以在单个字符串替换模式中一起使用其中三个。

第二个和第三个要求需要两个单独的正则表达式替换操作。重点是匹配并捕获所有字符,直到第二次出现 '. 并且只匹配第二次出现的 '.,然后替换为对第一组的反向引用:1) .replace(/^([^']*'[^']*)'/, '$1') ( demo ) 和 2) .replace(/^([^.]*\.[^.]*)\./, '$1') ( demo )。

详情

  • ^ - 字符串 anchor 的开始
  • ([^']*'[^']*) - 第 1 组:
    • [^']* - 除了 ' 之外的任何 0+ 个字符([^...] 是否定字符类匹配除类内定义以外的任何字符)
    • ' - 单引号
    • [^']* - 除了 '
    • 之外的任何 0+ 个字符
  • ' - 单引号。

此匹配项替换为 $1,第一个捕获组的内容。

第三个模式类似于第二个部分,只是 ' 被替换为 ./\. (注意在字符类中,. 被视为文字 .,它不匹配任何字符,但匹配 [...] 中的换行字符)。

关于javascript - 我们可以使用正则表达式一次解析多个规则吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46003815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com