13

年の入力フィールドがあり、それを検証するために正規表現が必要です。私はそのようなコードを持っています: ^([12]\d)?(\d\d)$. しかし、特定の範囲 (たとえば、1990 年から 2010 年) の年のみを検証できるようにしたいと考えています。どうすればいいですか?

編集。範囲は 1950 ~ 2050 である必要があります

4

8 に答える 8

37

これを試して:

1990 - 2010:

/^(199\d|200\d|2010)$/

1950年~2050年:

/^(19[5-9]\d|20[0-4]\d|2050)$/

その他の例:

1945 - 2013:

/^(194[5-9]|19[5-9]\d|200\d|201[0-3])$/

1812 - 3048:

/^(181[2-9]|18[2-9]\d|19\d\d|2\d{3}|30[0-3]\d|304[0-8])$/

基本的に、範囲を簡単な「正規表現可能な」チャンクに分割する必要があります。

1812-3048: 1812-1819 + 1820-1899 + 1900-1999 + 2000-2999 + 3000-3039 + 3040-3048
    regex: 181[2-9]    18[2-9]\d   19\d\d      2\d{3}      30[0-3]\d   304[0-8]
于 2013-07-09T12:04:35.613 に答える
10

ここでは、RegExp は適切なツールではないようです。年の値がすでに分離されている場合は、単純な比較が機能します。

if (+yr >= 1990 && +yr <= 2010)

+yr文字列を数値に変換します

于 2013-07-09T12:05:32.053 に答える
7

1950 年から 2050 年の範囲では、次の正規表現を使用できます。

^19[5-9]\d|20[0-4]\d|2050$

オンラインデモ

于 2013-07-09T12:09:13.730 に答える
4

正規表現:

/^(19[5-9]\d|20[0-4]\d|2050)$/

より簡単に...

var year = parseInt(textField.value, 10);
if( year >= 1950 && year <= 2050 ) {
    ...
}
于 2013-07-09T12:07:58.320 に答える
2
(199[0-9]|200[0-9]|2010)

これは、「例のケース」で機能します。

役立つ Web サイト: http://utilitymill.com/utility/Regex_For_Range

于 2013-07-09T12:05:25.223 に答える
2

1995年からの現在の年(動的)の正規表現

var current_year = new Date().getFullYear().toString().split("");
var reg=new RegExp("^(199[5-9]|200[0-9]|[0-"+current_year[0]+"][0-"+current_year[1]+"][0-"+current_year[2]+"][0-"+current_year[3]+"])$");
reg.test("1995");
于 2015-12-28T08:46:57.317 に答える