ホームページ  >  記事  >  バックエンド開発  >  正規表現についての質問です。桁数に1を書くと一致しますが、1より大きい数値を書くと一致しません。

正規表現についての質問です。桁数に1を書くと一致しますが、1より大きい数値を書くと一致しません。

WBOY
WBOYオリジナル
2016-06-23 14:02:231087ブラウズ

通常のルールは次のとおりです:

$patten='/^[1-9]\d{5}[1-2]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/';//就是最后这个4


最後の 4 を 1 に変更すると一致しますが、1 より大きい値に変更すると機能しません

この通常のルールは、ID を照合するために使用することを目的としています。どちらの桁が大きいか あれば参考に共有していただければ幸いです ~15ビット、18ビット対応~


ディスカッションへの返信(解決策)

表2. よく使われる修飾子
コード/構文の説明
* 0 回以上繰り返します
+ 1 回以上繰り返します
? 0 回以上繰り返します
{n} n 回繰り返します
{n,} n 回以上繰り返します
{n,m} n を繰り返します
15桁のIDカードがどのように配置されているのか分からないので、参考にさせていただきます

1. ID番号の意味:

世代(現在は廃止されており、判断する必要はありません)
市外局番(6桁) 生まれ年(2桁) 誕生月(2桁) 生まれた日(2桁) 番号(3桁) 計15桁
第二世代
市外局番(6桁) 生年( 4桁) 誕生月(2桁) 生年月日(2桁) 数字(3桁) チェックデジット(1桁) 計18桁
チェックデジットは[dX])?$/の場合もございます
3. 正確な判定(第 2 世代) はチェック コード生成アルゴリズムを使用する必要があります。各国言語の「IDカード認証コード生成機能」はオンラインでご覧いただけます


1. ID番号の意味:
生成(現在は廃止されており、判断する必要はありません)

市外局番(6桁) 西暦生年月日(2桁) 誕生月(2桁) 誕生日(2桁) シリアルナンバー(3桁) 合計15桁

第二世代
市外局番(6桁) 誕生年(4桁) 誕生月(2桁) 誕生日(2桁) ) シリアル番号(3桁) チェックデジット(1桁) 合計18桁
チェックデジットは{2}[dX])?$/
3. 正確な判断…

	function validateIdNumber($idnumber){		$patten='/^\d{17}$/';		preg_match($patten,$idnumber,$match);		var_dump($match);//为什么这也显示的是FALSE??我16位就可以,加到17就不行了,这到底是什么问题啊???	}	validateidnumber(22111111111234563);


validateidnumber( "22111111111234563 " );

文字列を使うので数値は範囲外です
本来ID番号は文字列であるべきです



2階xuzuningさんの回答より引用: 1. ID番号の意味:
世代(現在は廃止され判定不要)
市外局番(6桁) 生まれた年(2桁) 生まれた月(2桁) 生まれた日(2桁) 通し番号(3桁) 合計15桁
第二世代

市外局番(6桁) 生まれた年(4桁) 誕生月(2桁) 生まれた日(2桁) 連番(3桁) チェックデジット(1桁) 合計18桁

チェックデジットは、何が問題ですか? 16 桁を超えると科学表記に変更されるため、16 桁を超える数値は元の数値ではありません

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。