我使用在线工具制作竞赛。为了发送奖品,那里有一个表格,要求提供用户信息(名字,姓氏,地址等)。
可以选择使用正则表达式来验证以此形式输入的数据。
我正在努力使用正则表达式来输入街道号码(我位于比利时)。
街道号码可以是:
1234
1234a
1234a12
以数字开头(最多4位数) 也可以有字母(最多2个字符) 字母后面可以有数字(max3)
我想出了以下表达式:
^([0-9]{1,4})([A-Za-z]{1,2})?([0-9]{1,3})?$
但问题是,由于字母和数字的第二部分是可选的,它允许输入最多8位的数字,这不是最佳的。
1234
(第一组)(第二组中没有字母)5678
(第三组)
如果你们中的一个人能告诉我如何达到预期的结果,我们将不胜感激!
答案 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匹配一个最大
\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是带有测试的正则表达式。