为什么这个正则表达式无法正常工作?

时间:2017-07-17 20:02:11

标签: javascript regex

我需要检查一些输入是否严格如下:

PEOPLE-123456PERSON-12345376(可以是数字的任意组合)

-之后的数字无关紧要。它可以是从0到N的数字。

我想出了以下表达式:

/(PEOPLE-)|(PERSON-)?=^[0-9]+$/

问题是,即使-之后的字符不是数字,这也会有效。

  • PEOPLE-123131产生true
  • PERSON-123242收益true
  • PERSON-23123.341收益true
  • PEOPLE-.2341231产生false

我做错了什么?我没有看到表达本身存在任何问题,也许我很想看到它。

3 个答案:

答案 0 :(得分:1)

试试这个:

^(PERSON|PEOPLE)-[0-9]{1,}$

这样可以确保开始的时间恰好为PERSONPEOPLE,然后是-,最后是至少一个数字。

答案 1 :(得分:0)

您需要将分组括号括在两个选项中:

/^(PEOPLE|PERSON)-\d+$/

并且您不应该使用?将其标记为可选。我不知道为什么你把=^放在那个部分之后。

如果您想在数字中允许小数点,请使用[0-9.]代替\d

答案 2 :(得分:0)

如果数字是可选的,这应该有用。否则至少需要1个数字替换* with +。

/^(PEOPLE|PERSON)-\d*$/