当前位置: 首页 > 知识库问答 >
问题:

用破折号分隔的2个相同长度的数字的正则表达式

葛阳华
2023-03-14

匹配以下条件的正确正则表达式是什么:

  • 两个数字,用破折号(-)分隔

匹配的示例

  • 123-444

不应匹配的示例:

  • 1234-567
  • 123456-789012

这可能吗?

共有3个答案

颛孙和颂
2023-03-14

试试这个:

^ *((\d *- *\d)|(\d{2} *- *\d{2})|(\d{3} *- *\d{3})|(\d{4} *- *\d{4})|(\d{5} *- *\d{5})) *$
羊冠玉
2023-03-14

不,这在正则表达式中是不可能的(至少是JS风格)。您可以引用已匹配的组,但不能引用其属性(例如长度)。

当然,如果有最大长度限制,可以挤出一个具有所有可能性的表达式,但即使长度为5,这也将是一个无法维护的混乱。想象一下,当max len=10时会变得多么愚蠢。因此,我建议:

m = str.match(/^(\d+)\s*-\s*(\d+)$/)
valid = m && m[1].length == m[2].length
施恩
2023-03-14

也许你可以用这个:

^ *((\d *- *\d)|(\d{2} *- *\d{2})|(\d{3} *- *\d{3})|(\d{4} *- *\d{4})|(\d{5} *- *\d{5})) *$
 类似资料:
  • 我试图验证一个逗号分隔的数字列表,其中数字可以是1到3位,可以以0开头,但不能是0(0、00或000)。我正在使用以下内容,但当我测试“44222555”时,我发现无效: 我认为90在这里也是无效的,但应该是有效的

  • 我有一个,其中包含2或3个公司名称,每个名称用括号括起来。每个公司名称也可以包含括号中的单词。我需要用正则表达式将它们分开,但没有找到方法。 我的输入代码: 预期结果是: 我的代码: 这适用于和,但不适用于。 当前结果:

  • 我不确定这是否可以使用正则表达式。我会尝试使用正则表达式,但如果不可能,我会切换到双重验证。 我的数据库(postgresql)接受为15,6(最多15位,最多6位小数),因此如果我有10位整数,我可以有5位小数。小数分隔符被忽略。 我目前有一个正则表达式(逗号是小数分隔符): 它不验证总长度,只验证左侧的数字。但由于用户也可以键入点(千位分隔符),我有一个怪物:

  • 我正在检查用户输入的用户名 我试图使用preg_match()在PHP中验证用户名,但我似乎无法让它按照我想要的方式工作。我要求preg_match(): 只接受字母,数字和。-_ 即字母数字点破折号和下划线,我尝试了来自htaccess的正则表达式,就像这样 像这样,但它似乎不起作用,它给出了简单的alpha用户名的假。 我怎样才能让它工作? 我将在这样的功能中使用它 我在preg_match(

  • 问题内容: 这个问题已经在这里有了答案 : 如何使用正则表达式验证电话号码 (42个答案) 4年前关闭。 我需要您的帮助。我必须形成一个仅接受8个数字(不包含字母)且不超过3个破折号的正则表达式。 它应该接受以下示例: 它不应接受以下示例: 任何帮助表示赞赏。 问题答案: 您可以尝试一下。请参阅演示。 https://regex101.com/r/hE4jH0/20

  • 我想将一个长数组值转换为一个特定格式的字符串。 例如,将longArray={0,1,2,3}转换为字符串0.1.2.3 我可以执行arrays.ToString(longArray),它将返回[0,1,2,3]。 现在必须将字符串[0,1,2,3]转换为0.1.2.3