ホームページ >バックエンド開発 >PHPチュートリアル >英語と数字を含む規則的なルールを尋ねます。
小文字の [a から z]、下線 [_]、およびダッシュ [-] は、A と呼ばれるグループであり、グループ A の 1 つ以上のメンバーを含めることができます。
0 ~ 9 の数字は B と呼ばれるグループで、グループ B の 1 つ以上のメンバーを含めることができます。
純粋な 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 は許可されません
1 つの正規表現で実行できますか? それとも複数の正規表現で実行できますか?
//只允许 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*
Get $pattern = '/[a-z_-]*d*|d*[a-z_-]*/'
//只允许 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)*/
$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