在javascript中我注意到这件事,我不明白它是如何工作的:
function validate_pin(frm)
{
var piN = document.getElementById('codice');
if (!piN) {
var piN = document.getElementById('invio');
}
if (!piN.value.match(/^\d{3}$/) && !piN.value.match(/^\d{4}$/)) {
// SORRY! WRONG PIN!
//alert('ATTENZIONE! INSERIRE UN PIN NUMERICO!');
alert('Attenzione! Codice PIN errato!');
piN.focus();
return false;
}
}
和字符串if (!piN.value.match(/^\d{3}$/) && !piN.value.match(/^\d{4}$/))
意味着什么?
答案 0 :(得分:1)
pin
是一个DOM元素,很可能是HTMLInputElement
。
pin.value
是input元素的值,它是一个字符串。
String.match
匹配正则表达式(RegExp object)的字符串,当找不到匹配项时返回一个假值。
我也假设您可能不知道正则表达式的作用,所以解释:
^
锚点在字符串开头匹配,最后匹配$
匹配。\d
是一个字符类[0-9]
,需要完全匹配3
次(在第一次测试中)或4
次(第二次测试)。因此,您的字符串必须从头到尾包含正好3或4位数的字符。
旁注:您的代码以这种方式写得更优:
if (!/^\d{3,4}$/.test(piN.value)) {}
regexp.test
仅返回一个布尔值,指示字符串是否与模式匹配,而string.match
将返回成功匹配数组(强制为true
)或{{1}当找不到匹配项时(强制null
)。
因此两者都有相同的结果,但false
更适合于常规模式测试。
另一种选择,不依赖于正则表达式:
test
与以前的正则表达式版本的唯一区别是parseInt
将忽略前导和尾随空格以及尾随无效字符(应该是极端情况)。这个选项更具可读性IMO。您可以选择更适合您用例的解决方案。
答案 1 :(得分:0)
这是一个正则表达式:)你检查引脚是3位还是4位长。 您可以详细了解正则表达式here。
答案 2 :(得分:0)
以下是解释:
function validate_pin(frm)
{
// Get an input element with ID=codice
var piN = document.getElementById('codice');
// If there is no such element, get input with ID=invio
if (!piN) {
var piN = document.getElementById('invio');
}
// If value of this input is NOT a 3- or 4-digit number, alert with an error
// and return false.
if (!piN.value.match(/^\d{3}$/) && !piN.value.match(/^\d{4}$/)) {
// SORRY! WRONG PIN!
//alert('ATTENZIONE! INSERIRE UN PIN NUMERICO!');
alert('Attenzione! Codice PIN errato!');
piN.focus();
return false;
}
}
正则表达式/^\d{3}$/
表示:“字符串有三位数(\d
)而没有其他字符串(因为^
位于开头且$
位于末尾”。
例如:
/^\d{3}$/
匹配:123
,但不匹配a123
或123a
。/\d{3}$/
匹配:123
和a123
,但与123a
不匹配。/^\d{3}/
匹配:123
和123a
,但与a123
不匹配。条件:if (!piN.value.match(/^\d{3}$/) && !piN.value.match(/^\d{4}$/))
可以用较短的格式书写:if (!pIN.value.match(/^\d{3,4}$/))
。