语法不理解value.match

时间:2013-08-27 20:35:21

标签: 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.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}$/))意味着什么?

3 个答案:

答案 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,但不匹配a123123a
  • /\d{3}$/匹配:123a123,但与123a不匹配。
  • /^\d{3}/匹配:123123a,但与a123不匹配。

条件:if (!piN.value.match(/^\d{3}$/) && !piN.value.match(/^\d{4}$/))可以用较短的格式书写:if (!pIN.value.match(/^\d{3,4}$/))