javascript - Chrome 的正则表达式 - 我可以查看它们吗?

标签 javascript regex google-chrome

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

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

例如:

<input type="url" >

enter image description here

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

问题:

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

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

最佳答案

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

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

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

typeMismatchForHTMLInputElement::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 上找到文件夹。似乎他们中的大多数人都在使用正确的输入解析和检查,而不是正则表达式。

关于javascript - Chrome 的正则表达式 - 我可以查看它们吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18736976/

相关文章:

javascript - 类型错误 : Cannot read property 'console' of null

c++ - 使用 C 样式数组作为 STL 字符串操作的后端

java - 如何解析字符串中的数值?

javascript - Jasmine 测试在测试运行中、Firefox/Chrome 之间以及检查器打开/关闭时的结果不一致

css - Chrome 位置修复了 3d 转换中断

javascript - 对象作为 React 子对象无效(找到 : [object Promise])

javascript - 无法通过 javascript 添加不透明度过渡

javascript - 如何在 Cypress 中使用 RegExp 验证电话号码?

javascript - 无法在 Chrome 上使用 Babylon.js 加载纹理

javascript - 通过 jQuery 的 load() 加载部分页面时显示加载动画