5

Html5 入力タイプには、多くの新しいタイプが含まれています。

(範囲、電子メール、日付など...)

例えば ​​:

<input type="url" >

ここに画像の説明を入力

IEには正規表現ストア(内部フォルダーの1つ)があったことを知っています

質問 :

入力を検証するためにクロムが使用する正規表現を確認できますか?

それは表示可能なファイルか何かの下にありますか?/どうすればこれらの正規表現を見ることができますか?

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

KURLBlink のあらゆる場所で使用されている URL の適切な実装のようです。

比較すると、正規表現を使用する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 に答える