我需要正则表达式只允许输入字段中输入最大 2位数(或实际所需的限制值)。
该领域的要求如下:
a-z
A-Z
0-9
-
和.
字符\s
)我已经设法根据SO上的几个答案整理了以下regex
^(?:([a-zA-z\d\s\.\-])(?!([a-zA-Z]*\d.*){3}))*$
以上regex
非常接近。它成功地用于以下方面:
但它允许输入:
123
(但不是1234
,所以它已关闭)。
当仅数字输入字段时,只需输入12
。
我希望找到比当前regex
更有效,更清洁(如果可能)的解决方案,但它必须仍然是regex
,而不是JS
。
答案 0 :(得分:2)
你可以使用像
这样的积极前瞻(?=^(?:\D*\d\D*){2}$) # only two digits
^[- .\w]+$ # allowed characters
答案 1 :(得分:1)
您可以使用在开头处锚定的负前瞻,一旦在字符串中的任何位置找到3位数字,将使匹配失败:
^(?!(?:[^0-9]*[0-9]){3})[a-zA-Z0-9\s.-]*$
^^^^^^^^^^^^^^^^^^^^^^^
请参阅regex demo
<强>详情:
^
- 字符串开头(?!(?:[^0-9]*[0-9]){3})
- 如果找到正好3个以下序列,那么负面预测会使匹配失败:
[^0-9]*
- 除数字[0-9]
- 一个数字(因此,数字不必相邻)[a-zA-Z0-9\s.-]*
- 0 + ASCII字母,数字,空格,.
或-
符号$
- 字符串结束。