Html5 输入类型包括许多新类型。
(范围,电子邮件,日期等...)
例如 :
<input type="url" >
我知道 IE 曾经有正则表达式存储(在其内部文件夹之一上)
问题 :
我可以看到 chrome 使用哪些正则表达式来验证输入?
它是在一个可查看的文件下还是什么?/我怎样才能看到那些正则表达式?
Html5 输入类型包括许多新类型。
(范围,电子邮件,日期等...)
例如 :
<input type="url" >
我知道 IE 曾经有正则表达式存储(在其内部文件夹之一上)
问题 :
我可以看到 chrome 使用哪些正则表达式来验证输入?
它是在一个可查看的文件下还是什么?/我怎样才能看到那些正则表达式?
我查阅了 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文件夹中找到。似乎他们中的大多数人都在使用正确的解析和输入检查,而不是正则表达式。