Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 语法不理解value.match_Javascript_String_Syntax_Match - Fatal编程技术网

Javascript 语法不理解value.match

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

在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;
    }
}

字符串
如果(!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次(第二次测试)
因此,您的字符串从头到尾必须完全由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。