Chrome的Regexes - 我可以查看它们吗?

时间:2013-09-11 09:07:53

标签: javascript regex google-chrome

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

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

例如:

<input type="url" >

enter image description here

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

问题:

我能看到chrome用什么正则表达式来验证输入吗?

是否在可查看的文件下? /我怎么能看到那些正则表达式?

1 个答案:

答案 0 :(得分:4)

我查了一下Blink的源代码。请记住,我从来没有在今天看到它,所以我可能完全关闭。 假设我找到了合适的地方 -

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

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

调用

typeMismatchFor

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中随处可见。

相比之下,使用正则表达式的EmailInputTypetypeMismatchFor调用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文件夹中找到这些元素和更多元素。似乎他们中的大多数人正在使用正确的解析和检查输入,而不是正则表达式。