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