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

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

WBOY
Release: 2016-06-23 13:13:11
Original
1088 people have browsed it


小写【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)*/
Copy after login
Copy after login

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)*/
Copy after login
Copy after login




好像不行,检查 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); 
Copy after login
1 b1 aaa1 a__1 a-b1 4561 0001 01 a41 5b1 ag_d871 7588__faae0 aa7_f0 3322a_42340 as7gwe9fwef0 28_957a8ff927
Copy after login

source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template