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



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

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

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

够简单吧?

我正在使用这些工具来测试我的正则表达式:
正则表达式分析器
正则表达式验证器

以下是预期结果:

  • 有效
    • "1234A"
    • "Z"
    • "(空字符串)"
  • 无效
    • "A1234"
    • "FHFDSAHDS527523832DVHSFDG"

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

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

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

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

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

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

根据语言的不同,您还可以使用负面的展望。

^[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

类似的东西,只是根据你用你的语言做的那样进行了调整。

我使用正则表达式斯金纳来验证答案。

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

最新更新