【发布时间】:2017-03-01 12:18:04
【问题描述】:
我的要求是:
- 字符串至少应包含 4 个字符(仅限字母数字、 允许点和连字符)。
- 除此星号外,任何地方都可以使用(开始、中间或结束)
- 不应包含除上述第 1 点和第 2 点之外的任何其他字符。
例如以下是有效字符串:
Ab*08
*.6-*N*
以下是无效字符串:
****AB-*
GH.*
我的正则表达式看起来像:
^(.*?[a-zA-Z0-9.\-]){4,}.*$
我在第 1 点和第 2 点中提到的基本验证正在工作。但是正则表达式允许其他特殊字符,如 和 & 等。如何修改我的正则表达式来实现这一点?
【问题讨论】:
-
.匹配除换行符以外的任何字符。此外,您的要求也不清楚。请解释为什么这个或那个输入无效。 -
@WiktorStribiżew:正如我在问题中提到的 3 点。我的字符串应包含至少 4 个字符(字母数字、点或连字符)。字符串也可以在任何地方包含星号。除了这些字符之外,它不应包含任何其他字符。为了解释这一点,我举了几个例子。
-
@user613114 我建议您删除星号,然后对结果字符串运行正则表达式检查。这样会简单很多。
-
我认为 Deltharis 解释了其中的奥秘:计数时不应考虑
*。试试^(?=(?:\**[a-zA-Z0-9.-]){4})[a-zA-Z0-9.*-]+$ -
我认为正则表达式的核心是:你不能用它们解决所有问题。每次您需要其他人为您创建该正则表达式时;您可能会寻找您不理解的解决方案。当您将正则表达式添加到 您的 代码中时,该正则表达式将成为 您的 责任。所以,至少对我来说;每次我想“嗯,我可以用一个正则表达式来做到这一点”;但我真的很难自己建立它;我寻找其他选择;-)