2017-08-01 30 views
2

我正在使用在线工具创建比赛。为了发送奖品,这里有一个表格要求用户信息(名字,姓氏,地址,等等)。用于验证街道号的正则表达式

可以使用正则表达式来验证在此表单中输入的数据。

我正在努力与正则表达式放在街道号(我位于比利时)。

门牌号可以是以下几点:

1234 
1234a 
1234a12 

始于号码(最多4位) 可以有字母,以及(最多2个字符) 能有字母(S)后的数字( MAX3)

我想出了下面的表达式:

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

但问题是,字母和数字的第二部分是OPTIO最后,它允许输入最多8位数字,这是不理想的。

1234(第一组)(无第二组字母)5678(第三组)

如果你可以提示我如何达到预期的结果,将不胜感激!

+0

如果您选择了一个答案,请将其标记为数字标记下的一个答案,并在三角形上方和下方.....和嗯......接受前,***测试***它。 ... – Gangnus

+1

第一次很好的问题。欢迎来到SO! – Gangnus

回答

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

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位数字最大

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}以禁止前导零。

0

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

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

而且它的工作原理是魅力!我仍然不明白“:”代表什么,但下次我不得不摆弄正则表达式的时候,我会试着弄明白这一点。

一个愉快的一天有,

斯坦

+0

提出额外答案不是标记答案的正确方法。请删除您的答案。 – Gangnus

0

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

所以:

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

的:组合指()建设不会创建一个匹配的子字符串。

Here是与它的测试正则表达式。