【问题标题】:JavaScript RegEX explicit character matches only onceJavaScript RegEX 显式字符仅匹配一次
【发布时间】:2018-03-28 04:36:38
【问题描述】:

我需要一个具有以下约束的正则表达式:

  1. 仅包含[A-Z0-9.*] 个字符

  2. 长度为 1 到 15 个字符

  3. 必须包含*,但只能包含一次。

因此,以下断言:

  • ABC.123 无效(无星号)
  • ABC.123* 有效(末尾加星号)
  • *ABC.123 有效(以星号开头)
  • ABC.*123 有效(中间有星号)
  • *ABC.123* 无效(多于一颗星)

我的目标是只有一个表达式。我显然可以有一个声明前两个约束的表达式:[A-Z0-9.*]{1,15},然后是第二个表达式来声明第三个约束\*{1}

是否有可能有一个表达式从本质上验证字符串输入的整体结构,然后用另一个表达式回退并重新评估字符串?

【问题讨论】:

  • {1} 什么都不做。

标签: javascript regex


【解决方案1】:

使用前瞻,您可以使用此正则表达式:

^(?=.{1,15}$)[A-Z0-9.]*\*[A-Z0-9.]*$

RegEx Demo

RegEx 拆分:

  • ^:开始
  • (?=.{1,15}$):肯定的前瞻断言我们在输入中有 1 到 15 个字符
  • [A-Z0-9.]*:匹配零个或多个 [A-Z0-9.] 字符
  • \*:从字面上匹配一个星号
  • [A-Z0-9.]*:匹配零个或多个 [A-Z0-9.] 字符
  • $:结束

【讨论】:

  • 或者你也可以使用这个正则表达式:^(?=[^*]*\*[^*]*$)[A-Z0-9.*]{1,15}$
  • 这很聪明。我以前也需要类似的东西,但想不出有什么办法,谢谢!
  • 完美,谢谢!
猜你喜欢
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
相关资源
最近更新 更多