gpt4 book ai didi

javascript - 1980 年前和 1980 年后的 RegEx Vin 验证

转载 作者:搜寻专家 更新时间:2023-11-01 04:25:00 28 4
gpt4 key购买 nike

1981 年,车辆识别号 (VIN) 使用 17 位系统进行了标准化。在 1981 年之前,制造商使用自己公司独有的 VIN,并且这些数字没有公认的标准,因此不同的制造商使用不同的格式。 http://www.crankshaftcoalition.com/wiki/VIN_decoding

它要求所有销售的公路车辆都包含 17 个字符的 VIN,其中不包括字母 I (i)、O (o) 或 Q (q)(以避免与数字 1 混淆)和 0)。 http://en.wikipedia.org/wiki/Vehicle_identification_number

所以我想要完成的是下拉列表,如果选择 1980 - 1900 之间的任何地方,VIN 要么遵循制造商的指南,要么根本不适用字母 I (i)、O ( o), or Q (q) 可以被使用和任意数量的字符/数字。但是,如果选择 1981 年及以后的版本,则 RegEx 将启动并要求使用我已显示有效或无效 VIN 的表达式对其进行格式化。

暂时插入一个有效的 VIN 以进行测试。如果您删除最后一个数字,它将显示“无效 VIN”

如有任何建议或帮助,我们将不胜感激!

http://jsfiddle.net/ommLz4th/1/

正则表达式

^[A-HJ-NPR-Z\\d]{8}[\\dX][A-HJ-NPR-Z\\d]{2}\\d{6}$

jQuery 识别码验证器

    $(function() {
$("#vin").on("keyup blur", function() {
if (validateVin($("#vin").val())) {
$("#result").css('color', 'green').html("Valid VIN");
$("#vin").removeClass("not-ok").addClass("ok");
} else {
$("#result").css('color', 'red').html("Invalid VIN");
$("#vin").removeClass("ok").addClass("not-ok");
}
});
});


function validateVin(vin) {
var re = new RegExp("^[A-HJ-NPR-Z\\d]{8}[\\dX][A-HJ-NPR-Z\\d]{2}\\d{6}$");
return vin.match(re);
}

HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<label name="vin">VIN</label>
<input type="text" id="vin" value="1FAFP40634F172825" />
<span id="result"></span>

为了测试目的下拉

<select name="vehicleyear" id="vehicleyear">
<option value="">Choose Year</option>
<option value="1985">1985</option>
<option value="1984">1984</option>
<option value="1983">1983</option>
<option value="1982">1982</option>
<option value="1981">1981</option>
<option value="1980">1980</option>
<option value="1979">1979</option>
<option value="1978">1978</option>
<option value="1977">1977</option>
<option value="1976">1976</option>
<option value="1975">1975</option>
<option value="1974">1974</option>
</select>

实际下拉

<cfparam name="form.vehicleyear" default="">

<cfset VARIABLES.y1=DatePart("yyyy",Now())>
<cfset VARIABLES.y2=VARIABLES.y1+2>

<cfif Val(form.vehicleyear) LT VARIABLES.y1 or Val(form.vehicleyear) GT VARIABLES.y2>
</cfif>

<cfoutput>
<cfselect name="vehicleyear" id="vehicleyear" required="yes" message="Please select vehicle year.">
<option value="" selected="selected">Select Year</option>
<cfloop index="i" from="#VARIABLES.y2#" to="1900" step="-1">
<option value="#i#"<cfif form.vehicleyear EQ i> selected</cfif>>#NumberFormat(i,"0000")#</option>
</cfloop>
</cfselect>
</cfoutput>

最佳答案

我不会为您开发正则表达式,但整体模式应该是这样的:

$(function() {
$("#vin").on("keyup blur", function() {
if ( validateVin( this.value, Number($("#vehicleyear").val()) ) ) {
$("#result").css('color', 'green').html("Valid VIN");
$("#vin").removeClass("not-ok").addClass("ok");
} else {
$("#result").css('color', 'red').html("Invalid VIN");
$("#vin").removeClass("ok").addClass("not-ok");
}
});
function validateVin(vin, date) {
if(date > 1980) {
var re = new RegExp("^[A-HJ-NPR-Z\\d]{8}[\\dX][A-HJ-NPR-Z\\d]{2}\\d{6}$");
return vin.match(re);
} else {
//Pre validation are rules to complex. We are forced to assume the vin is valid.
//Though really at least a simple test would be preferable - eg vin.length >= 20 or whatever
return true;
}
}
});

请注意 vin date 被传递给 validateVin() 从而允许代码分支。

关于javascript - 1980 年前和 1980 年后的 RegEx Vin 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26594504/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com