是否可以将两种不同长度的字符串与preg_match
匹配?如果是,如何?使用preg_match匹配具有两种不同固定长度的字符串
我正在寻找的是这样的:由于
preg_match("/^[a-zA-Z0-9]{13|25}$/", $string);
,返回真,如果$string
拉斯正好无论是13 或 25个字符的长度。
P.S .:我知道应该是{13,25}
- {min,max}
- ,但我不感兴趣在一个区间内匹配。
是否可以将两种不同长度的字符串与preg_match
匹配?如果是,如何?使用preg_match匹配具有两种不同固定长度的字符串
我正在寻找的是这样的:由于
preg_match("/^[a-zA-Z0-9]{13|25}$/", $string);
,返回真,如果$string
拉斯正好无论是13 或 25个字符的长度。
P.S .:我知道应该是{13,25}
- {min,max}
- ,但我不感兴趣在一个区间内匹配。
我知道你的问题是关于用正则表达式来完成的,但通常是尽可能避免使用正则表达式的最佳做法。几个原因:
所以这里是一个非正则表达式的方法。
if (in_array(strlen($string),array(13,25)) && ctype_alnum($string)) {
// good
} else {
// bad
}
喜欢的东西
preg_match("/^([a-zA-Z0-9]{13}|[a-zA-Z0-9]{25})$/", $string);
([a-zA-Z0-9]{13}|[a-zA-Z0-9]{25}
交替匹配任一长度13或25这是一个快速的方法:
preg_match('/^[a-zA-Z0-9]{13}([a-zA-Z0-9]{12})?$/', $string);
即使是这样的特定情况?如果你必须匹配'/^[a-z0-9] */i',但是如果字符串的长度是固定的,我可以看到区别。 – Alex 2014-12-01 16:53:42
@Alex这不是说正则表达式*不能*在你的情况下完成工作,更重要的是是否使用正则表达式的原则和最佳实践。一般来说,内置函数的性能会更好,一般而言,非正则表达式解决方案更灵活,更易于理解,就其他编码人员而言,业务需求也会发生变化等。 – 2014-12-01 19:24:06
@Alex不会误解我的意思..我是一个正则表达式的粉丝。这是完全性感的。但说实话,这是一个超级强大的工具,它的整体用途非常狭窄,从最佳实践PoV – 2014-12-01 19:25:06