(范围,电子邮件,日期等……)
例如 :
< input type =“url”>
我知道IE曾经有正则表达式存储(在其内部文件夹之一)
题 :
我能看到chrome用什么正则表达式来验证输入吗?
它是在可查看的文件下还是什么? /我怎么能看到那些正则表达式?
最佳答案
我查了一下Blink的源代码.请记住,我在今天之前从未见过它,所以我可能会完全离开.
假设我找到了合适的地方 –
原文链接:https://www.f2er.com/js/429810.html假设我找到了合适的地方 –
对于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,&matchLength);
return !matchOffset && matchLength == addressLength;
}