preg_match用于几种模式

时间:2014-02-20 21:24:07

标签: php regex

我正在用PHP编写一个应用程序,需要测试一个字段以获得正确的凭证代码。凭证条目可以是三种模式之一。我不擅长表达,所以希望得到一些专家的帮助。

这三种模式是: 1000150000(任意10位数) 12345678(任意8位数字) 3JFK-TAB-CDEFG(首先发现一个数字,其余为alpha。有或没有连字符)

我在想,因为这三个凭证条目是如此不同,可能需要在三个不同的IF语句中完成。

感谢您的帮助! 瑞克

4 个答案:

答案 0 :(得分:4)

你可以这样做:

(^\d{10}$|^\d{8}$|^\d[A-Za-z-]+$)

工作正则表达式示例:

http://regex101.com/r/uI9dU0

答案 1 :(得分:0)

(\d{10})?(\d{8})?(\d[a-zA-Z-]+)?

这将创建三个可选组1-3,它们将捕获任何10个数字(组1),任何8个数字(组2)或数字后跟字母字符,带或不带连字符(组3)。 / p>

以下是regex101上the expression的链接。

答案 2 :(得分:0)

您可以使用:

/^[0-9](?:[0-9]{7}(?:[0-9]{2})?|[A-Z]*(?>-[A-Z]+)*)$/

这种模式的主要兴趣是:

  • 避免这样的字符串:9ABCD-EFGH- (以连字符结尾)
  • 通过使最后2位数字可选而不重试所有数字。 (而不是使用替代)
  • 尝试仅匹配第一个数字一次。 (如果第一个字符不是数字,则模式立即失败。)

答案 3 :(得分:-1)

或者你可以使用交替。也就是说,写下三个正则表达式并将它们与|一起串起来标志意思是“匹配其中一个”。

所以

/[^...$]|\d|Z$/

(即三个字符或包含数字或以Z结尾。)