5

Html5 输入类型包括许多新类型。

(范围,电子邮件,日期等...)

例如 :

<input type="url" >

在此处输入图像描述

我知道 IE 曾经有正则表达式存储(在其内部文件夹之一上)

问题 :

我可以看到 chrome 使用哪些正则表达式来验证输入?

它是在一个可查看的文件下还是什么?/我怎样才能看到那些正则表达式?

4

1 回答 1

4

我查阅了 Blink 的源代码。请记住,我今天之前从未见过它,所以我可能完全离开了。假设我找到了正确的地方 -

对于type="url"字段URLInputType,有 ,代码:

bool URLInputType::typeMismatchFor(const String& value) const
{
    return !value.isEmpty() && !KURL(KURL(), value).isValid();
}

typeMismatchFor被称为HTMLInputElement::isValidValue

bool HTMLInputElement::isValidValue(const String& value) const
{
    if (!m_inputType->canSetStringValue()) {
        ASSERT_NOT_REACHED();
        return false;
    }
    return !m_inputType->typeMismatchFor(value) // <-- here
        && !m_inputType->stepMismatch(value)
        && !m_inputType->rangeUnderflow(value)
        && !m_inputType->rangeOverflow(value)
        && !tooLong(value, IgnoreDirtyFlag)
        && !m_inputType->patternMismatch(value)
        && !m_inputType->valueMissing(value);
}

KURL似乎是 URL 的正确实现,在 Blink 中随处使用。

相比之下,调用的实现EmailInputType确实typeMismatchFor使用isValidEmailAddress了正则表达式:

static const char emailPattern[] =
    "[a-z0-9!#$%&'*+/=?^_`{|}~.-]+" // local part
    "@"
    "[a-z0-9-]+(\\.[a-z0-9-]+)*"; // domain part

static bool isValidEmailAddress(const String& address)
{
    int addressLength = address.length();
    if (!addressLength)
        return false;

    DEFINE_STATIC_LOCAL(const RegularExpression, regExp,
                        (emailPattern, TextCaseInsensitive));

    int matchLength;
    int matchOffset = regExp.match(address, 0, &matchLength);

    return !matchOffset && matchLength == addressLength;
}

这些元素和更多可以在/html文件夹中找到。似乎他们中的大多数人都在使用正确的解析和输入检查,而不是正则表达式。

于 2013-09-11T09:50:17.623 回答