我的简单正则表达式接受空字符串和公寓号码有什么问题?

时间:2012-10-12 20:44:45

标签: regex

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

这是正在使用的正则表达式:

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

够简单呃?

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

以下是预期结果:

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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.

我还没有弄清楚如何验证null字符,但使用您使用的任何语言的工具可能更容易。这个逻辑的一些东西:

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

沿着这些方向的东西,只是根据你的语言进行调整。

我使用RegEx Skinner来验证答案。

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