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

忽略正则表达式中一个字符的最大长度

章德惠
2023-03-14

我有一个正则表达式,最多允许6个小数(“.”是小数分隔符)

/^\d*[.]?\d{0,6}$/

我还想设置最大长度条件,以便用户只能输入12位数字,最大长度应排除“.”我如何使用正则表达式做到这一点。

共有3个答案

商佑运
2023-03-14

太长别读;

^(?!(?:\D*\d){13})\d*[.]?\d{0,6}$ 
^(?=(?:\D*\d){0,12}\D*$)\d*[.]?\d{0,6}$

您可以使用一种简单的积极前瞻方法:保留您的模式(如果它按预期工作),然后插入

(?=(?:\D*\d){0,x}\D*$)

紧跟在^之后,将x更改为所需的位数。

因此,您可以使用

^(?=(?:\D*\d){0,12}\D*$)\d*[.]?\d{0,6}$
 ^^^^^^^^^^^^^^^^^^^^^^^

(?=(?:\D*\D){0,12}\D*$)匹配一个位置,该位置后面紧跟零到12次出现的任何0个非数字字符,后跟一个数字1,然后在字符串末尾有任何0个非数字。

查看正则表达式演示

或者,禁止超过13位的字符串:

^(?!(?:\D*\d){13})\d*[.]?\d{0,6}$
 ^^^^^^^^^^^^^^^^^

(?!(?:\D*\D){13})是一种负前瞻,如果出现13次任何0个非数字后跟一个数字字符,则匹配失败。

当您需要允许空字符串时,这比正面前瞻方法更好。

查看正则表达式演示

邢运良
2023-03-14

我们可以尝试使用负面表情:

^(?:(?!.*\.)(?!\d{13})|(?=.*\.)(?![0-9.]{14}))\d+(?:\.\d{1,6})?$

以下是正则表达式的解释:

^(?:                        from the start of the string
    (?!.*\.)(?!\d{13})      assert that no more than 12 digits appear
                            (in the case of a number with NO decimal point)
    |                       or
    (?=.*\.)(?![0-9.]{14})) assert that no more than 13 digits/decimal point appears
                            (in the case of a number which HAS a decimal point)
    \d+                     then match one or more digits (whole number portion)
    (?:\.\d{1,6})?          followed by an optional decimal component (1 to 6 digits)
$                           end of the string
卫乐童
2023-03-14

您可以使用正前瞻来检查具有小数点后最多6位的数字或12位的字符串),然后总共匹配多达13个字符:

^(?=\d*\.\d{0,6}$|\d{1,12}$).{1,13}$

对于该输入,第2和第5个值将匹配:

1234567890123
123456.789012
12345.6789012
1234567.890123
12345.67890

regex101上的演示

 类似资料:
  • 我需要根据给定条件验证输入, -总长度必须为20个字符-前五个位置必须是字母-剩余的应该是数字,但必须存在一个连字符(-),该连字符只能出现在数字之间。我喜欢正则表达式 但它也允许在结尾使用连字符,甚至可以不使用连字符。

  • 我在寻找一个正则表达式,它允许数字具有小数点后的最大长度。 它应该允许最大16位数字和3位小数,但是最大16位应该包括小数,但不包括。字符。到目前为止,我已经尝试过了:,除了允许17个单个数字之外,它很接近,而它应该只接受16个。如果我将更改为,它会破坏小数。 可接受值: 123 123.3 123.45 123.456 1111111111111.345(共16个数字) 111111111111

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

  • 我正在尝试在文本中查找html标签,如下所示: 但是颜色部分可以改变(比如#bbbbbb)…我想我可以为此使用正则表达式,对吗?但是我不确定我怎么能忽略它的颜色部分… 你能帮我吗?这可能吗? 非常感谢你

  • 我有一个用于匹配 URL 的正则表达式(它完成了工作,它为我想要的而工作。但是,当我不希望它时,它也会匹配电子邮件的域。 当前匹配项: < li>http://www.foo.bar < li>foo.bar < li >网址:foo.bar(与foo.bar部分匹配) < li>info@foo.bar(匹配foo.bar部分) 我不希望它匹配最后一个,所以它只匹配前三个。我尝试添加到前面,但这

  • 我有以下正则表达式: 这允许: 开头可选 然后是数字、点、逗号、圆括号、破折号和空格。 除此之外,我需要确保数字和加号(如果存在)的长度在9到15之间(所以我不计算符号之外的任何特殊字符)。 最后一个条件是我有问题的地方。 有效输入: 358(9)1234567 无效输入: 3.5 8.9,1-2(3)4.5,6.77777(33个字符,只有20个计数字符(数字和加号)太多) 如果可能的话,使用正