質問
ようにしていき正規表現検証。のregexのニーズに合わせ、以下の
- M/D/YYYY
- MM/DD/YYYY
- 一ヶ月から始めることができ、先頭のゼロ(例:03/12/2008)
- 一日から始めることができ、先頭のゼロ(例:3/02/2008)
- は使用できません月30日は月31日(例:2/31/2008)
していきたいと思い
^(([1-9]|1[012])[-/.]([1-9]|[12][0-9]|3[01])[-/.](19|20)\d\d)|((1[012]|0[1-9])(3[01]|2\d|1\d|0[1-9])(19|20)\d\d)|((1[012]|0[1-9])[-/.](3[01]|2\d|1\d|0[1-9])[-/.](19|20)\d\d)$
この試合を適切にそれ以外のものを含む2/30/2008&2/31/2008.
いてより良い提案?
編集: 見 その答え にRegExLib
^((((0[13578])|([13578])|(1[02]))[\/](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/](([1-9])|([0-2][0-9])|(30)))|((2|02)[\/](([1-9])|([0-2][0-9]))))[\/]\d{4}$|^\d{4}$
で試合すべてのヶ月間有効でのYYYY/MM/DD形式です。
謝です。
解決
これは適切な使用の正規表現オブジェクトまえに基づいており、また以下の
[0-9]{2}/[0-9]{2}/[0-9]{4}
ネットワーク範囲より高いレベルの言語です。
他のヒント
こちらは日exに一致するすべての有効日を含めうるう年です。形式に受け入れmm/dd/yyyy mm-dd-yyyyまたはmmです。dd.yyyyの形式
^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
送迎 Asiq Ahamed
降り立ったところでこの問題は広く、この正規表現を使うことがで致する特定の日付フォーマット(OP).でも、その発見は、多くの回答やコメントして総合的に強調され、多くの落とし穴を構築し、効果的なパターンもトリッキーを抽出する際には日付に対し、混合不良により品質-非構造化データ
私の探索、問題のいくシステムを構築できます正規表現の配置と簡単なサブ表現に一致するの区切り文字は、有効な範囲の年月日の順に開きます。
これらは:-
Delimeters
[^\w\d\r\n:]
このまま試合は何もしない単語文字、数字、運搬、新たなラインまたはコロンを付ける。大腸がりを防ぐマッチング時のように見える日も試験データ)
できる最適に配分のパターンを高速マッチングが良い基盤を検出する最も有効な区切り文字.
注意しで試合の文字列との混区切り文字のようにこの2/12-73場合、実際に有効な日です。
の年の値
(\d{4}|\d{2})
この試合でグループの二つまたは4桁、ほとんどの場合する場合がありますので使用を避けだが扱うデータからの年間で0-999分を超えて9999が必要になった方へのお取り扱いる場合がほとんどである1,3>4桁の年の場合のみです。
の月の値
(0?[1-9]|1[0-2])
試合は1-12無に関わらず先頭のゼロ-注0 00はないマッチング済み専用品です。
日付の値を
(0?[1-9]|[12]\d|30|31)
試合は1-31無に関わらず先頭のゼロ-注0 00はないマッチング済み専用品です。
この表現の試合日、月、年の形式の日
(0?[1-9]|[12]\d|30|31)[^\w\d\r\n:](0?[1-9]|1[0-2])[^\w\d\r\n:](\d{4}|\d{2})
でも試合を年月日です。またbookendedの境界線事業者の確保のための全日付文字列を選び予防に有効なサブミているから抽出されていないデータを整形するな境界タグ20/12/194ッ20/12/19と101/12/1974ッ01/12/1974
比較の結果を次の表現の一つ以上の試験データのナンセンス部(下)
\b(0?[1-9]|[12]\d|30|31)[^\w\d\r\n:](0?[1-9]|1[0-2])[^\w\d\r\n:](\d{4}|\d{2})\b
あの検証この正規表現などが無効な日付などの31/02/2001するマッチング済み専用品です。このデータ品質に問題が、その他い、regexな必要性を検証します。
です(開発者としてできませんの品質を保証するものの、ソースデータの必要はありません。を取り扱いは追加の検証コードでまい合わせ や を検証するデータの正規表現で非常に厄介なが支援なし 非常に 簡潔に書です。
ゴミ、生ゴミです。
とが発見された場合には混合形式の日付の値を異なり、抽出してください;を組み合わせることができるカップルの表現としていただくことになります。
この悲惨な現マッチDMYとYMD日
(\b(0?[1-9]|[12]\d|30|31)[^\w\d\r\n:](0?[1-9]|1[0-2])[^\w\d\r\n:](\d{4}|\d{2})\b)|(\b(0?[1-9]|1[0-2])[^\w\d\r\n:](0?[1-9]|[12]\d|30|31)[^\w\d\r\n:](\d{4}|\d{2})\b)
だかどうかを知ることができれば日6/9/1973、6月、9月.どうしたらいいのかと悩んだシナリオがない問題の発生の原因になるのかけを聞いたことがある。が悪いの練習、なんかを扱っているように見え、データのオーナーからのガバナンスのハンマーで打ち込みます。
最後に希望する場合には、試合をYYYYMMDDの文字列がない区切り文字までの不確かさの表現のようになります
\b(\d{4})(0[1-9]|1[0-2])(0[1-9]|[12]\d|30|31)\b
ただし、再び、試合形式が無効な値を持つように20010231(31年!) :)
試験データ
実験のソリューションこのスレッドその結試験データセットを含む様々な有効および無効な日もトリッキー場まではい合わせる倍となった日の日数です。
これに役立つ人がいる。
Valid Dates in various formats
Day, month, year
2/11/73
02/11/1973
2/1/73
02/01/73
31/1/1973
02/1/1973
31.1.2011
31-1-2001
29/2/1973
29/02/1976
03/06/2010
12/6/90
month, day, year
02/24/1975
06/19/66
03.31.1991
2.29.2003
02-29-55
03-13-55
03-13-1955
12\24\1974
12\30\1974
1\31\1974
03/31/2001
01/21/2001
12/13/2001
Match both DMY and MDY
12/12/1978
6/6/78
06/6/1978
6/06/1978
using whitespace as a delimiter
13 11 2001
11 13 2001
11 13 01
13 11 01
1 1 01
1 1 2001
Year Month Day order
76/02/02
1976/02/29
1976/2/13
76/09/31
YYYYMMDD sortable format
19741213
19750101
Valid dates before Epoch
12/1/10
12/01/660
12/01/00
12/01/0000
Valid date after 2038
01/01/2039
01/01/39
Valid date beyond the year 9999
01/01/10000
Dates with leading or trailing characters
12/31/21/
31/12/1921AD
31/12/1921.10:55
12/10/2016 8:26:00.39
wfuwdf12/11/74iuhwf
fwefew13/11/1974
01/12/1974vdwdfwe
01/01/99werwer
12321301/01/99
Times that look like dates
12:13:56
13:12:01
1:12:01PM
1:12:01 AM
Dates that runs across two lines
1/12/19
74
01/12/19
74/13/1946
31/12/20
08:13
Invalid, corrupted or nonsense dates
0/1/2001
1/0/2001
00/01/2100
01/0/2001
0101/2001
01/131/2001
31/31/2001
101/12/1974
56/56/56
00/00/0000
0/0/1999
12/01/0
12/10/-100
74/2/29
12/32/45
20/12/194
2/12-73
保守性Perl5.10版
/
(?:
(?<month> (?&mon_29)) [\/] (?<day>(?&day_29))
| (?<month> (?&mon_30)) [\/] (?<day>(?&day_30))
| (?<month> (?&mon_31)) [\/] (?<day>(?&day_31))
)
[\/]
(?<year> [0-9]{4})
(?(DEFINE)
(?<mon_29> 0?2 )
(?<mon_30> 0?[469] | (11) )
(?<mon_31> 0?[13578] | 1[02] )
(?<day_29> 0?[1-9] | [1-2]?[0-9] )
(?<day_30> 0?[1-9] | [1-2]?[0-9] | 30 )
(?<day_31> 0?[1-9] | [1-2]?[0-9] | 3[01] )
)
/x
を取得することができますの要素名このバージョン。
say "Month=$+{month} Day=$+{day} Year=$+{year}";
(これを制限する値。)
を制御する日に有効で以下のフォーマット:
YYYY/MM/DDまたはYYYY-MM-DD
私は環境毎に説明すtu以下の正規表現:
(((19|20)([2468][048]|[13579][26]|0[48])|2000)[/-]02[/-]29|((19|20)[0-9]{2}[/-](0[4678]|1[02])[/-](0[1-9]|[12][0-9]|30)|(19|20)[0-9]{2}[/-](0[1359]|11)[/-](0[1-9]|[12][0-9]|3[01])|(19|20)[0-9]{2}[/-]02[/-](0[1-9]|1[0-9]|2[0-8])))
試合
2016-02-29 | 2012-04-30 | 2019/09/31
非合
2016-02-30 | 2012-04-31 | 2019/09/35
カスタマイズできますのでご希望だけを許可するといったように'/'または'-'る。この正規表現を厳重に管理の妥当性の日時を確認28,30 31日のヶ月間でも、うるう年29/02ます。
やってみでは、とてもうまくいき防止コードから多くのバグ!
参考:また、変異型のSQL datetime.だが(私の名): 正規表現検証は、タイムスタンプ
の声に迎えられた:)
音のようなoverextending regexます。んで使用の正規表現に一致数日付フォーマットを使用して別の機能を検証するための価値の日付の分野で抽出された。
Perl拡張版
※利用の /x
を模倣しています。
/^(
(
( # 31 day months
(0[13578])
| ([13578])
| (1[02])
)
[\/]
(
([1-9])
| ([0-2][0-9])
| (3[01])
)
)
| (
( # 30 day months
(0[469])
| ([469])
| (11)
)
[\/]
(
([1-9])
| ([0-2][0-9])
| (30)
)
)
| ( # 29 day month (Feb)
(2|02)
[\/]
(
([1-9])
| ([0-2][0-9])
)
)
)
[\/]
# year
\d{4}$
| ^\d{4}$ # year only
/x
独自の
^((((0[13578])|([13578])|(1[02]))[\/](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/](([1-9])|([0-2][0-9])|(30)))|((2|02)[\/](([1-9])|([0-2][0-9]))))[\/]\d{4}$|^\d{4}$
行わなかった場合されている時には、上記の提案、その結果が、先ほど任天堂さんですが当日行ったこの式より50リンク、またすべての種別に従い左寄せで記載する。
^20\d\d-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(0[1-9]|[1-2][0-9]|3[01])$
var dtRegex = new RegExp(/[1-9\-]{4}[0-9\-]{2}[0-9\-]{2}/);
if(dtRegex.test(date) == true){
var evalDate = date.split('-');
if(evalDate[0] != '0000' && evalDate[1] != '00' && evalDate[2] != '00'){
return true;
}
}
この正規表現検証と01-01-2000と12-31-2099とのマッチングセ
^(0[1-9]|1[012])([- /.])(0[1-9]|[12][0-9]|3[01])\2(19|20)\d\d$
Regexしまうわけではありませんの検証番号の範囲(この番号が必要から1~5の場合の前で起き2の事項が含まれる下記の6).ただ一つのパターンの配置の数regex.が必要な場合を検証する品質の日かたまりをビニール袋に入れ、dateオブジェクトjs/c#/vb、interogateの数あります。
知っていないお答えもんを使用日の取り扱い通常のチェックの場合は有効なのでしょうか?もし変更があった場合には、正規表現を否定先読みの主張のように(?!31/0?2)すなわち、一致しない31/2は31/02)まだまだ問題の受け入れ29 02以外のうるう年の単一セパレータの日付形式です。
問題は容易ではない場合には、検証の日、これをチェック フォーラムのスレッド.
例や、クライアントまで、フルのC#チェック このリンク
ご利用の場合は別のプラットフォーム-言語知らせ
Perl6版
rx{
^
$<month> = (\d ** 1..2)
{ $<month> <= 12 or fail }
'/'
$<day> = (\d ** 1..2)
{
given( +$<month> ){
when 1|3|5|7|8|10|12 {
$<day> <= 31 or fail
}
when 4|6|9|11 {
$<day> <= 30 or fail
}
when 2 {
$<day> <= 29 or fail
}
default { fail }
}
}
'/'
$<year> = (\d ** 4)
$
}
利用後は、このチェックを入力しの値がいくつか用意されてい $/
あるいは個人として $<month>
, $<day>
, $<year>
.(これはごく文法へのアクセスの価値 $/
)
せようとして、年間で一致しない29日(早以外のうるう年です。
だってこの正規表現されています。ようなもの:
( (0?1|0?3| <...> |10|11|12) / (0?1| <...> |30|31) |
0?2 / (0?1| <...> |28|29) )
/ (19|20)[0-9]{2}
この が 読み取りを可能にする機能があり、理解する
少し異なるアプローチするものではありませんまですが。。。
私はクリアしました。
は、このプロジェクトに関する日以前の1月2008年.でも、私の"日付"入力した内容は、次回以降に使用strtotime().に合わない場合は>=1199167200した日付で有用であった。うみ方で価値が変わるとされている日付が入力され-1が返されます。Nullの場合は入力しな戻り、今日の日数ことができるようになり、必要にチェックのためのnull以外の参入します。
作品は私の状況もの。