1981年,车辆识别号码(VIN)使用十七位数系统进行了标准化。在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),或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 Vin Validator
$(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>
答案 0 :(得分:3)
我不打算为你开发RegExps,但整体模式应该是这样的:
$(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()
,从而允许代码进行分支。