您好,欢迎访问一九零五行业门户网

问一个英文和数字互相包含的正则

小写【a到z】,下划线【_】,小短横【-】,为一组,叫做a,可包含一个或多个a组中的成员。 
数字0-9,为一组,叫做b,可包含一个或多个b组中的成员。
纯a组合,或纯b组合,允许, 例 b,aaa,a__,a-b,456,000,0 允许
ab组合,或ba组合,允许,例 a4,5b, ag_d87,7588__faae 允许
aba组合,或bab组合,不允许,例 aa7_f,   3322a_4234,  as7gwe9fwef, 28_957a8ff927 不允许
能用一条正则搞定吗,或用几条?
回复讨论(解决方案) //只允许 ab 或 ba$str = '28_957a8ff927';if(preg_match('#^([a-z_-]+\d+|\d+[a-z_-]+)$#',$str,$m)){ print_r($m);}else{ echo 'failed';}/*尝试用否定环视,但是长度不定,会报错preg_match('#(?
a = [a-z_-]
b = [0-9]
p = a*b*|b*a*
得 $pattern = '/[a-z_-]*\d*|\d*[a-z_-]*/'
a = [a-z_-]
b = [0-9]
p = a*b*|b*a*
得 $pattern = '/[a-z_-]*\d*|\d*[a-z_-]*/'
好像不行。。。。。。。
我之前是这样写的/^([0-9]*[a-z]*|[a-z]*[0-9]*)$/,,,好像也不行。。。。当出现 a4地 时
//只允许 ab 或 ba$str = '28_957a8ff927';if(preg_match('#^([a-z_-]+\d+|\d+[a-z_-]+)$#',$str,$m)){ print_r($m);}else{ echo 'failed';}/*尝试用否定环视,但是长度不定,会报错preg_match('#(?
好像不行,检查 abc 或 123 时
$pattern = '/(^[a-z_-]*\d*$)|(^\d*[a-z_-]*$)/';$data = array( 'b', 'aaa', 'a__', 'a-b', '456', '000', '0', 'a4', '5b', 'ag_d87', '7588__faae', 'aa7_f', '3322a_4234', 'as7gwe9fwef', '28_957a8ff927',);foreach($data as $str) printf(%d %s\n, preg_match($pattern, $str), $str);
1 b1 aaa1 a__1 a-b1 4561 0001 01 a41 5b1 ag_d871 7588__faae0 aa7_f0 3322a_42340 as7gwe9fwef0 28_957a8ff927
其它类似信息

推荐信息