有限长度的条件正则表达式php
我试图设置正则表达式验证,但有一个条件是通过的,不应该通过。好像我错过了什么。下面是正则表达式和我要验证的内容。谢谢你在这方面的帮助 我的正则表达式:有限长度的条件正则表达式php,php,regex,conditional,Php,Regex,Conditional,我试图设置正则表达式验证,但有一个条件是通过的,不应该通过。好像我错过了什么。下面是正则表达式和我要验证的内容。谢谢你在这方面的帮助 我的正则表达式: ~^(?=([a-z]{2}))[a-z]{2}[0-9]{6}$|(?=([a-z]{1}))[a-z]{1}[0-9]{6}[a-z]{1}$~i 应验证的数据(两个字符加6个数字或字符加6个数字加一个字符): AB123456 A123456B 不应验证的数据。我的问题是,如果在有效的AB123456之后添加了一个字符,则该字符不应通过
~^(?=([a-z]{2}))[a-z]{2}[0-9]{6}$|(?=([a-z]{1}))[a-z]{1}[0-9]{6}[a-z]{1}$~i
应验证的数据(两个字符加6个数字或字符加6个数字加一个字符):
AB123456
A123456B
不应验证的数据。我的问题是,如果在有效的AB123456之后添加了一个字符,则该字符不应通过
AB123456A
A123456AB我想你把这件事复杂化了 您希望匹配两个相似的模式。你可以做聪明的向后看/向后看之类的事情,但在这种特殊情况下,你想要的是通过单独匹配模式更容易解决:
/(?:[a-z]{2}\d{6})|(?:[a-z]\d{6}[a-z])/
我认为你把这件事复杂化了 您希望匹配两个相似的模式。你可以做聪明的向后看/向后看之类的事情,但在这种特殊情况下,你想要的是通过单独匹配模式更容易解决:
/(?:[a-z]{2}\d{6})|(?:[a-z]\d{6}[a-z])/
当您需要用正则表达式匹配多个字符时,您应该使用限制量词——您确实这样做了。但是,当需要**将长度限制为匹配的N个字符时,应该使用零宽度断言 由于您的问题是匹配整个字符串,因此需要锚定:
^
和$
(字符串末尾)。验证时,我建议使用\A
而不是^
和\z
(仅在字符串末尾匹配)而不是$
(可能在最后一个换行之前匹配)
注意,您不需要条件表达式,您需要分组
图案详情:
-字符串锚的开始\A
-小写字母[a-z]
-两种选择之一:(?:[a-z]\d{6}|\d{6}[a-z])
-小写字母[a-z]
-六位数字\d{6}
或
-六位数字\d{6}
-小写字母[a-z]
-字符串结尾\z
^
和$
(字符串末尾)。验证时,我建议使用\A
而不是^
和\z
(仅在字符串末尾匹配)而不是$
(可能在最后一个换行之前匹配)
注意,您不需要条件表达式,您需要分组
图案详情:
-字符串锚的开始\A
-小写字母[a-z]
-两种选择之一:(?:[a-z]\d{6}|\d{6}[a-z])
-小写字母[a-z]
-六位数字\d{6}
或
-六位数字\d{6}
-小写字母[a-z]
-字符串结尾\z
(a-z{{0-9}[0-9}[0-9}[0-9}[0-9}[6}{{{{6}}}40<<<<<
^([a-z]{2}\d{6}|[a-z]\d{6}[a-z])有什么问题$
?还有一件事:-字符需要在第一位还是最后一位?使用::)使用::)使用::)使用::)使用:::)使用:::)使用:::)使用:::)使用::::)使用::::)使用::::::::::::::::::::)如果不是(如果不是这个案件,那么你regex,你regex是错误的,你regex是错误的,谢谢,谢谢,谢谢,谢谢,谢谢,你你你你你你你的regex是错误,你你的regex是错误,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,谢谢,321321321321321321321321787878787878787878787878787878787,第二一,第二个,第二个是错误,第二个是错误,第二个是错误,第二个是错误,第二个是错误,第二个是错误,第二个是错误,第二个1}[0-9]{6}[a-z]{1})$。您错误地使用了定位点使用^([a-z]{2}\d{6}|[a-z]\d{6}[a-z])有什么问题吗$
?还有一件事:-字符需要在第一位还是最后一位?因为如果不是这样的话,那么你的正则表达式是错误的谢谢rock321987第二个非常好用。谢谢Sverri,上面的一些评论解决了我的问题。我离它很近。谢谢你的模式是错误的,因为它没有锚定。@Casimirithippolyte然后锚定它。谢谢Sverri,上面的一些评论解决了我的问题。我离它很近。谢谢你的模式是错误的,因为它没有被锚定。@Casimirithippolyte然后锚定它。谢谢Wiktor的帮助和详细解释。非常有帮助。我想补充一点,在这种情况下分组并不是必要的。从OP的正则表达式中去掉所有不需要的垃圾后,唯一的问题是它在第二个分支中缺少一个起始锚点(^
)。感谢Wiktor的帮助和详细解释。非常有帮助。我想补充一点,在这种情况下分组并不是必要的。从OP的正则表达式中去掉所有不需要的垃圾后,唯一真正错误的是第二个分支中缺少了起始锚点(^
)。