用于验证街道号码的正则表达式

时间:2017-08-01 10:13:02

标签: regex

我使用在线工具制作竞赛。为了发送奖品,那里有一个表格,要求提供用户信息(名字,姓氏,地址等)。

可以选择使用正则表达式来验证以此形式输入的数据。

我正在努力使用正则表达式来输入街道号码(我位于比利时)。

街道号码可以是:

1234
1234a
1234a12

以数字开头(最多4位数) 也可以有字母(最多2个字符) 字母后面可以有数字(max3)

我想出了以下表达式:

^([0-9]{1,4})([A-Za-z]{1,2})?([0-9]{1,3})?$

但问题是,由于字母和数字的第二部分是可选的,它允许输入最多8位的数字,这不是最佳的。

1234(第一组)(第二组中没有字母)5678(第三组)

如果你们中的一个人能告诉我如何达到预期的结果,我们将不胜感激!

5 个答案:

答案 0 :(得分:0)

您可以使用此正则表达式:

^\d{1,4}([a-zA-Z]{1,2}\d{1,3}|[a-zA-Z]{1,2}|)$

其中:

\d{1,4} - 1-4位

([a-zA-Z]{1,2}\d{1,3}|[a-zA-Z]{1,2}|) - 可选组,可以是

[a-zA-Z]{1,2}\d{1,3} - 1-2个字母+ 1-3个数字

[a-zA-Z]{1,2} - 1-2个字母

empty

答案 1 :(得分:0)

\d{0,4}[a-zA-Z]{0,2}\d{0,3}

\d{0,4}第一个groupe匹配一个最多4位数的数字

[a-zA-Z]{0,2}第二个groupe匹配一个最大

的2位数的字符

\d{0,3}第一个groupe匹配一个最多3位数的数字

答案 2 :(得分:0)

你必须将最后两组保持在一起,不允许最后一组存在,如果第二组不存在,例如。

^\d{1,4}(?:[a-zA-z]{1,2}\d{0,3})?$

或稍微不那么优化(但显示方法更好)

^\d{1,4}(?:[a-zA-z]{1,2}(?:\d{1,3})?)?$

当您使用它进行验证时,我假设您不需要捕获组并将其替换为非捕获组。

您可能希望将第一个数字检查更改为[1-9]\d{0,3}以禁止前导零。

答案 3 :(得分:0)

非常感谢您的回答!我尝试了塞巴斯蒂安的解决方案:

^ \ d {1,4}(?:[A-ZA-Z] {1,2} \ d {0,3})?$

它就像一个魅力!我仍然不太明白“:”代表什么,但下次我必须弄清楚正则表达式时,我会试着弄清楚它!

度过愉快的一天,

斯坦

答案 4 :(得分:0)

第一个数字不能为0 数字前后不应有其他符号。

所以:

^[1-9]\d{0,3}(?:[a-zA-Z]{1,2}\d{0,3})?$

?:组合意味着()构造不会创建匹配的子字符串。

Here是带有测试的正则表达式。