年の入力フィールドがあり、それを検証するために正規表現が必要です。私はそのようなコードを持っています: ^([12]\d)?(\d\d)$
. しかし、特定の範囲 (たとえば、1990 年から 2010 年) の年のみを検証できるようにしたいと考えています。どうすればいいですか?
編集。範囲は 1950 ~ 2050 である必要があります
年の入力フィールドがあり、それを検証するために正規表現が必要です。私はそのようなコードを持っています: ^([12]\d)?(\d\d)$
. しかし、特定の範囲 (たとえば、1990 年から 2010 年) の年のみを検証できるようにしたいと考えています。どうすればいいですか?
編集。範囲は 1950 ~ 2050 である必要があります
これを試して:
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]
ここでは、RegExp は適切なツールではないようです。年の値がすでに分離されている場合は、単純な比較が機能します。
if (+yr >= 1990 && +yr <= 2010)
は+yr
文字列を数値に変換します
正規表現:
/^(19[5-9]\d|20[0-4]\d|2050)$/
より簡単に...
var year = parseInt(textField.value, 10);
if( year >= 1950 && year <= 2050 ) {
...
}
(199[0-9]|200[0-9]|2010)
これは、「例のケース」で機能します。
役立つ Web サイト: http://utilitymill.com/utility/Regex_For_Range
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");