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 上找到文件夹。似乎他们中的大多数人都在使用正确的输入解析和检查,而不是正则表达式。
关于javascript - Chrome 的正则表达式 - 我可以查看它们吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18736976/