3

所以我想限制一个包含可选公寓号码的文本框。

这是有问题的正则表达式:

([0-9]{1,4}[A-Z]?)|([A-Z])|(^$)

够简单吧?

我正在使用这些工具来测试我的正则表达式:
Regex Analyzer
Regex Validator

以下是预期结果:

  • 有效的
    • “1234A”
    • “Z”
    • “(空字符串)”
  • 无效的
    • “A1234”
    • “fhfdsahds527523832dvhsfdg”

显然,如果我在这里,正则表达式会接受无效的。此正则表达式的目标是接受 1 到 4 个带有可选字母的数字、单个字母或空字符串。

我似乎无法弄清楚什么不起作用,我的意思是我们这里有一个足够简单的正则表达式。我可能遗漏了一些东西,因为我对正则表达式不是很好,但这种语法在我看来还不错。希望这里有人可以指出我的错误。

感谢所有帮助,非常感谢。

4

2 回答 2

3

您还需要在前两个选项中使用^$锚点。您还可以将第二个选项包含在第一个选项中(它也立即匹配第三个变体):

^[0-9]{0,4}[A-Z]?$

如果没有锚,您的正则表达式将匹配,因为它只会从字符串中的任何位置选择一个字母。

于 2012-10-12T20:48:34.407 回答
1

根据语言的不同,您还可以使用否定的前瞻性。

^[0-9]{0,4}[A-Za-z](?!.*[0-9])

分解:

^[0-9]{0,4}  =  This look for any number 0 through 4 times at the beginning of the string
[A-Za-z]     =  This look for any characters (Both cases)
(?!.*[0-9])  =  This will only allow the letters if there are no numbers anywhere after the letter.

我还没有完全弄清楚如何针对空字符进行验证,但是使用您使用的任何语言的工具可能会更容易完成。沿着这个逻辑的东西:

if String Doesn't equal $null Then check the Rexex

沿着这些思路,只是调整了你会用你的语言做的事情。

我使用RegEx Skinner来验证答案。

编辑:修复了评论中的错误

于 2012-10-12T20:58:57.177 回答