限制正则表达式中的过滤字符



这是我的正则表达式,我想过滤长度仅为8-14的数字。有多个|操作,所以我需要在每个操作或任何共同的解决方案中设置限制,可以为整个正则表达式工作吗?

这是我的正则表达式(匹配英国号码与各种代码。我需要考虑一些漏洞,所以请不要介意它的长度):

$pattern = '/^(?(?:(?:0(?:0|11))?[s-]?(?|+)44)?[s-]?(?(?:0)?[s-]?(?)?|0)(?:d{2})?[s-]?d{4}[s-]?d{4}|d{3})?[s-]?d{3}[s-]?d{3,4}|d{4})?[s-]?(?:d{5}|d{3}[s-]?d{3})|d{5})?[s-]?d{4,5}|8(?:00[s-]?11[s-]?11|45[s-]?46[s-]?4d))(?:(?:[s-]?(?:x|ext.?s?|#)d+)?)$^|^2(?:0[01378]|3[0189]|4[017]|8[0-46-9]|9[012])d{7}|1(?:(?:1(?:3[0-48]|[46][0-4]|5[012789]|7[0-49]|8[01349])|21[0-7]|31[0-8]|[459]1d|61[0-46-9]))d{6}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-4789]|7[013-9]|9d)|3(?:0d|[25][02-9]|3[02-579]|[468][0-46-9]|7[1235679]|9[24578])|4(?:0[03-9]|2[02-5789]|[37]d|4[02-69]|5[0-8]|[69][0-79]|8[0-5789])|5(?:0[1235-9]|2[024-9]|3[0145689]|4[02-9]|5[03-9]|6d|7[0-35-9]|8[0-468]|9[0-5789])|6(?:0[034689]|2[0-689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0124578])|7(?:0[0246-9]|2d|3[023678]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-5789]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7d|8[02-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-5789]|4[2-9]|5[0-579]|6[234789]|7[0124578]|8d|9[2-57]))d{6}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-4789]|8[345])))|3(?:638[2-5]|647[23]|8(?:47[04-9]|64[015789]))|4(?:044[1-7]|20(?:2[23]|8d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[123]))|5(?:24(?:3[2-79]|6d)|276d|6(?:26[06-9]|686))|6(?:06(?:4d|7[4-79])|295[567]|35[34]d|47(?:24|61)|59(?:5[08]|6[67]|74)|955[0-4])|7(?:26(?:6[13-9]|7[0-7])|442d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]d|37(?:5[2-5]|8[239])|84(?:3[2-58]))|9(?:0(?:0(?:6[1-8]|85)|52d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))d{3}|176888[234678]d{2}|16977[23]d{3}|7(?:[1-4]dd|5(?:0[0-8]|[13-9]d|2[0-35-9])|624|7(?:0[1-9]|[1-7]d|8[02-9]|9[0-689])|8(?:[014-9]d|[23][0-8])|9(?:[04-9]d|1[02-9]|2[0-35-9]|3[0-689]))d{6}|76(?:0[012]|2[356]|4[0134]|5[49]|6[0-369]|77|81|9[39])d{6}|80(?:0d{6,7}|8d{7})|500d{6}|(?:87[123]|9(?:[01]d|8[0-3]))d{7}|8(?:4[2-5]|70)d{7}|70d{8}|56d{8}|(?:3[0347]|55)d{8}|8(?:001111|45464d)$|(?:((+?d+)?)|(+d{0,3}))? ?d{2,3}([-.]?d{2,3} ?){3,4}/';

添加

^d{8-14}(adding above regex)?$

是正确的?

如果我说错了请指正

根据这个答案,我认为在表达式的前面加上一个指定长度限制的正面展望就足够了。

^(?=.{8,14})b$(adding above regex)

最新更新