Home >Backend Development >PHP Tutorial >问一个英文和数字互相包含的正则

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-23 13:13:111091browse


小写【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-z_-]+)\d+(?![a-z_-]+)#',$str,$m)*/

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('#(?<![a-z_-]+)\d+(?![a-z_-]+)#',$str,$m)*/




好像不行,检查 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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn