Javascript 语法不理解value.match
在javascript中,我注意到了一件我不理解它是如何工作的事情:Javascript 语法不理解value.match,javascript,string,syntax,match,Javascript,String,Syntax,Match,在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.matc
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;
}
}
字符串
如果(!piN.value.match(/^\d{3}$/)和&!piN.value.match(/^\d{4}$/)
它是什么意思?这是一个正则表达式:)您检查piN是3位还是4位长。
您可以了解有关regex的更多信息。以下是一个解释:
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
)的字符串,而没有其他数字(因为begining处有^
,末尾有$
)
例如:
匹配:/^\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}$/)
piN
是DOM元素,很可能是一个
pin.value
是输入元素的值,它是一个字符串
将字符串与正则表达式(a)匹配,在未找到匹配项时返回falsy值
我还假设您可能不知道正则表达式的作用,因此请解释:
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
,需要精确匹配[0-9]
3次(第一次测试)或
4次(第二次测试)
旁注:您的代码将以以下方式编写:
if (!/^\d{3,4}$/.test(piN.value)) {}
regexp.test
仅返回指示字符串是否与模式匹配的布尔值,而string.match
将在成功时返回匹配数组(强制为true
),或在未找到匹配时返回null
(强制为false
)
因此,两者的结果相同,但test
更适合于常规模式测试
另一种选择,不依赖正则表达式:
var pinValue = parseInt(pin.value, 10);
if (pinValue >= 100 && pinValue <= 9999) {}
var pinValue=parseInt(pin.value,10);
如果(pinValue>=100&&pinValue你搜索了吗?@Bergi实际上我只是想做些更好的事情,但是谢谢!=]
@user2723065-是的,任何数字。所以对于\d{3}
这意味着000-999,对于\d{4}
-0000-9999。