ホームページ  >  記事  >  ウェブフロントエンド  >  jQueryソースコード解析-02 よく使われる正規表現 RegExp よく使われる正規表現_jquery

jQueryソースコード解析-02 よく使われる正規表現 RegExp よく使われる正規表現_jquery

WBOY
WBOYオリジナル
2016-05-16 17:59:32863ブラウズ

著者: nuysoft/JS Siege Master/Gao Yun QQ: 47214707 電子メール: nuysoft@gmail.com
声明: この記事はオリジナルの記事です。転載する必要がある場合は、出典を示し、元のリンクを保持してください。
次の記事のプレビュー: jQuery での正規表現解析

2.4 よく使われる正規表現
インターネット上で広く流通している記事「よく使われる正規表現」を見つけて、一つ一つ分析してみました。不備があったので追加・修正します。

コードをコピー コードは次のとおりです:

一般的に使用される数値正則化 (厳密一致)
通常の意味
^[1-9]d*$ は正の整数に一致します
^-[1-9]d*$ は負の整数に一致します
^-?[1-9]d*$ は負の整数に一致しますintegers
^[1-9]d*|0$ は非負の整数 (正の整数 0) に一致します
^-[1-9]d*|0$ は非正の整数 (負の整数 0) に一致します
^[ 1-9]d*.d*|0.d*[1-9]d*$ は正の浮動小数点数と一致します
^-([1-9]d*.d*|0 .d*[1- 9]d*)$ は、負の浮動小数点数
^-?([1-9]d*.d*|0.d*[1-9]d*|0?) に一致します。 0 |0)$ は浮動小数点数と一致します Points
^[1-9]d*.d*|0.d*[1-9]d*|0?.0 |0$ は非負の浮動小数点と一致します数値 (正の浮動小数点数 0)
^ (-([1-9]d*.d*|0.d*[1-9]d*))|0?.0 |0$ は非一致正の浮動小数点数 (負の浮動小数点数 0)

コードをコピー コードは次のとおりです。 🎜>
一般的な文字列正規表現

正規の意味の補足
^[A-Za-z] $ は、26 文字の英字または /^[a-z] $/i で構成される文字列と一致します
^[A-Z] $ は、26 個の英字で構成される大文字に一致します。
^[a-z] $ で構成される文字列は、26 個の英小文字で構成される文字列に一致します。
^[A-Za-z0-9 ] $ は、数字と 26 個の英字で構成される文字列と一致します。 w にはアンダースコアが含まれることに注意してください_
^w $ は、数字、26 個の英字、またはアンダースコアで構成される文字列と一致します
一般的に使用される数値の正規化と一般的な文字列の正規化は、最も基本的な規則性の応用例であり、読者はこれらを入門演習として使用して、意味をすぐに理解できるかどうかを確認してください。


コードをコピー コードは次のとおりです:
中国語の文字と一致

一般的に使用される正規表現は [u4e00-u9fa5] ですが、この範囲は完全ではありません。例:
/[u4e00-u9fa5]/.test( '⻏' ) // 部首 ⻏ をテストし、false を返します
Unicode バージョン 5.0 エンコーディングに従って、漢字を正確に判断するには、以下を含める必要があります:
範囲の意味 範囲の意味
2E80-2EFF CJK 部首補足 2F00-2FDF 康熙市辞書部首
3000-303F CJK 記号と句読点 31C0-31EF CJK ストローク
3200-32FF クローズド CJK テキストと月 3300- 33FF CJK 互換
3400-4DBF CJK 統一表意文字拡張 A 4DC0-4DFF 易経六十四六芒星記号
4E00-9FBF CJK 統一表意文字 F900-FAFF CJK 互換象形文字
FE30-FE4F CJK 互換形式 FF00 -FFEF 全角 ASCII、全角句読点
したがって、中国語の文字を一致させるための正しい正規表現は次のとおりです:
var rcjk = /[u2E80-u2EFFu2F00-u2FDFu3000-u303Fu31C0-u31EFu3200-u32FFu3300-u33FFu3400-u4DBFu4DC 0 -u4DFFu4E00- u9FBFuF900-uFAFFuFE30-uFE4FuFF00-uFFEF] /g;
句読点と記号を一致させたくない場合は、正規表現内の対応する範囲を削除してください:
3000-303F CJK 記号と句読点 FF00- FFEF 全角 ASCII、全角句読点


コードをコピー コードは次のとおりです:
は 2 バイト文字 (漢字を含む)

[^x00-xff] に一致します。これは文字列の長さの計算に使用できます (2 バイト文字は 2 としてカウントされます) 、ASCII 文字は 1 としてカウントされます)。コード例は次のとおりです:
console .info( "abc".replace( /[^x00-xff]/g,"aa" ).length ) // 3
console.info( "漢字".replace( /[^x00-xff]/ g,"aa" ).length ) // 4
console.info( "abc汉字".replace( /[ ^x00-xff]/g,"aa").length ) // 7


コードをコピーコードは次のとおりです:

HTML タグに一致する正規表現

まず、インターネット上で流通しているバージョンについて説明します:
<(S*?)[^>]*>.*?< ; /1>|
*? * は 0 以上を意味し、2 つは 0 より大きいことを意味し、関数は *
( S*?) タグの長さは 0 より大きい必要があるため、
|<.*?/> タグは


<.*? 一部のタグは閉じられていないため、
次のように修正:
var rtag = /^<([a-z] )s*/?>.*(?:)?$/i
rtag.exec( ' <-div>') // null
rtag.exec( '
abc') // ["
abc", "div"]
Thisこのテスト ステートメントは、テキスト コンテンツを含むタグを抽出するために作成されています。厳密に一致させたい場合は、次のように再度変更できます。
var rtag = /^<([a-z ] )s*/?> ( ?:)?$/i // 真ん中を削除 .*
この規則の適用範囲は単純なタグの一致と抽出に限定されており、一致することはできませんネストされたタグ。

コードをコピー コードは次のとおりです。

の正規のマッチング先頭と末尾の空白文字 式

まず、インターネット上で流通しているバージョンについて説明します。
^s*|s*$
は行頭と行末の空白文字を削除できます。例:
' t nr abc t nr '.replace( /^s*|s*$/g, '' ) // abc
ただし、s* を使用すると、文字列の先頭に s があるかどうかを判断できません。または終了、例:
/^s *|s*$/.test( 'abc' ) // true
次のように修正します:
^s |s $
' t nr abc t nr '.replace( /^s |s $/ g, '' ) // abc
/^s |s $/.test( 'abc' ) // false

コードをコピー コードは次のとおりです:

電子メール アドレスに一致する正規表現

最初Email のルールを導入します: local-part@domain
 local-part の最大長は 64、ドメインの最大長は 253、最大長は 256 です
 Local-part は任意の ASCII を使用できます文字:
 大文字と小文字の英字 a-z、A-Z
 数字 0-9
 文字!#$%&'* -/=?^_`{|}~
 文字. 最初と最後にすることはできません。また、2 回続けて指定することはできません
 ただし、一部のメールサーバーでは、特殊文字を含むメールアドレスは拒否されます
 ドメイン(ドメイン名)は、英字 26 文字、数字 10 文字までに制限されます。ハイフン -
 ハイフン - 最初の文字にすることはできません
 トップレベル ドメイン名 (com、cn など) 長さは 2 ~ 6 文字です
まず、インターネット上で流通しているバージョンについて説明します:
w ([- .]w )*@w ([-.]w )*.w ([- .]w )*
() 不可解なグループ化、録画せずにグループ化するだけなら、 use (?:)
@w ドメインにはアンダースコア_
w ([-.]w )* を含めることはできません。 トップレベル ドメイン名はルール
に準拠していないため、次のように修正されます:
var remail = /^([w-_] (?:.[w-_] )*)@((?:[a-z0-9] (? :-[a-zA-Z0-9] )*) .[a-z]{2,6})$/i
remail.exec( 'nuysoft@gmail.com' ) // "nuysoft@gmail.com ", "nuysoft", "gmail.com"]
remail.exec( 'nuysoft@gmail.comcomcom' ) // null
remail.exec( 'nuysoft@_gmail.com ) // null
改訂された正規表現には次の制限があります。
中国語のメールボックスと中国語のドメイン名をサポートします。サポートしない理由は、私の個人的な好みとそのような派手なものが嫌いだからです
 特殊な記号をサポートしません。メールサーバー以外の拒否を回避します。必要に応じて追加できます。
参考記事:
http://en.wikipedia.org/wiki/Email_address
http://baike.baidu.com/view/119298.htm

コードをコピー コードは次のとおりです:

URL に一致する正規表現

まず、インターネット上で流通しているバージョンについて話しましょう:
[a-zA-z] ://[^s]*
大まかに、 URL 内の各ブロックはグループ化されていません
修正は次のとおりです (インターネット上で出回っている別のバージョン):
var _url = "^((https|http|ftp|rtsp|mms)?://) ?" / /
"(([0-9a-z_!~*'().&= $%-] : )?[0-9a-z_!~*'().&= $%- ] @) ?" // ftp user@
"(([0-9]{1,3}.){3}[0-9]{1,3}" // IP 形式の URL-199.194 .52.184
"|" // IP と DOMAIN (ドメイン名) を許可します
"([0-9a-z_!~*'()-] .)*" // ドメイン名 - www. > "([ 0-9a-z][0-9a-z-]{0,61})?[0-9a-z]." // 第 2 レベル ドメイン名
"[a-z]{2 ,6})" // 第一レベルのドメイン - .com または .museum
"(:[0-9]{1,4})?" // ポート - :80
"((/?) |" // ファイル名がない場合はスラッシュは必要ありません
"(/[0-9a-z_!~*'().;?:@&= $,%#-] ) /? )$";
var rurl = new RegExp( _url, 'i' );

テスト:
rurl.exec( 'baidu.com' ) // ["baidu.com",未定義、未定義、未定義、未定義、「baidu.com」、未定義、「baid」、未定義、未定義、「」、「」、未定義]
rurl.exec( 'http://baidu.com' ) / /
rurl.exec( 'http://www.baidu.com' ) // ["http://baidu.com", "http://", "http", 未定義, 未定義, "baidu .com", unknown, "baid", unknown, unknown, "", "", unknown]
rurl.test( 'baidu' ) // true
でも使いやすそうですTODOを学ぶ必要があります。


コードをコピー コードは次のとおりです:
は一致していますかアカウントの法的

まず、インターネット上で流通しているバージョンについて話しましょう:
^[a-zA-Z][a-zA-Z0-9_]{4,15}$
(Starting文字、5 ~ 16 文字のセクション、英数字のアンダースコアを使用できます)
制限は文字で始める必要があります。たとえば、QQ ログイン プラットフォーム
制限はアンダースコアで始めることはできません。たとえば、Baidu では許可されているので簡単です。
var ruser = /w{4,16}/



国内の電話番号と一致

オンラインで流通しているバージョン非常に便利です:
d{3}-d{8}|d{4}-d{7}
コメント: 一致する形式は 0511-4405222 または 021-87888822 などです



Tencent QQ アカウントと一致します

インターネット上で流通しているバージョンは非常に便利です:
[1-9][0-9]{4,}
コメント: Tencent QQ 番号は 10000 から始まります



コードをコピーします コードは次のとおりです:
中国の郵便番号と一致します

バージョンインターネット上で流通している情報は非常に便利です:
[1-9]d{5}(?!d)
コメント: 中国の郵便番号は 6 桁の数字です



コードをコピー コードは次のとおりです:

一致 ID カード

まず、インターネット上で流通しているバージョンについて話しましょう:
d{15}|d{18}
d{15}
d{ 18} はい判定ですが、少し大雑把です
ID カードからは住所、誕生日、性別などが解析できるので、特別に説明します:
 ID カードのルール
中国の ID カードは 15 桁 (第 1 世代) または 18 桁 (第 2 世代) ですが、違いは、第 2 世代の証明書は第 1 世代の証明書の 7 桁の前に 19 を追加するだけで、最後に検証コードを追加することです
 15 をアップグレードします桁を 18 桁に変換し、18 桁の数字の構成 (住所、誕生日、性別) を解析します。
コードは次のとおりです。
function parseID(ID) {
if ( ID.length == 15 ) {
// 18 ビットにアップグレード
ID = ID.substr( 0, 6 ) "19" ID.substr( 6 );
// 最初の 17 桁に対応する係数
var Rank = [
「7」、「9」、「10」、「5」、「8」、「4」、「2」、「1」、「6」、「3」、「7」、「9」 ", "10", "5", "8", "4" , "2"
];
// 最初の 17 は、17 で加重除算した余りに対応する最後の ID 番号です
var last = [
"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2 "
];
// 加重合計
for ( var i = 0, sum = 0, len = ID.length; i sum = ID[ i ] * Rank[ i ]; // 最後の桁を追加します
ID = last[ sum % 11 ];
if ( ID.length != 18 ) return null; >var match =rid.exec( ID );
return match ? {
ID : ID,
area : match[ 1 ],
y : match[ 2 ],
m : match[ 3 ],
d : match[ 4 ],
sex : match[ 5 ] % 2
} : null;
}
制限事項:
 アドレスコードはコードを実際のアドレスに変換するには、Du Niang に問い合わせてください。
 返されるオブジェクトの性別は 1 (男性) または 0 (女性) であり、ページ表示に必要な場合は、性別 "男性" : "女性" テスト:
console.info( parseID( "142327840821047" ) );
console.info( parseID("142327198408210470" ) );
参照:
http://baike.baidu。 com/view/118340 .htm#1





コードをコピー
コードは次のとおりです: IP アドレスの一致 まず、インターネット上で流通しているバージョンについて説明します。
d .d .d .d
d 数に制限はありません
修正は次のとおりです:
var rip = /^(?:( ?:[01]?d{1,2}|2[0-4]d|25[0-5]).){3 }(?:[01]?d{1,2}|2[0 -4]d|25[0-5])$/;
rip.test( "192.168.1.1" ) // true
rip.test( "0.0.0.0" ) // true
rip.test( "255.255.255.255" ) // true
rip.test( "256.255.255.255" ) // false
さらにグループ化を増やします:
var rip2 = /^([01]?d {1,2}|2[0-4]d|25[0-5]).([01]?d{1, 2}|2[0-4]d|25[0-5]) ([01]?d{1,2}|2[0-4]d|25[0-5])。([01] ]?d{1,2}|2[0-4]d|25[0-5])$/;
rip2.exec( "192.168.1.1" ) // ["192.168.1.1", " 192", "168", "1", "1"]
rip2 .exec( "0.0.0.0" ) // ["0.0.0.0", "0", "0", "0", " 0"]
rip2.exec( "255.255.255.255" ) // [ "255.255.255.255", "255", "255", "255", "255"]
rip2.exec( "256.255 .255.255" ) // null

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