我想获取一个电子邮件地址并将其转换为有效的 DOM id,以便它可以用于使用 jQuery 动态构建 HTML 元素。
例如:
- 鉴于:
some.user@example.com
- 回报:
some-user-at-example-com
- 为了:
$('<div />').attr('id, 'some-user-at-example-com');
有点像 Rails 的参数化方法。什么是干净,简单的方法来做到这一点?
我想获取一个电子邮件地址并将其转换为有效的 DOM id,以便它可以用于使用 jQuery 动态构建 HTML 元素。
例如:
some.user@example.com
some-user-at-example-com
$('<div />').attr('id, 'some-user-at-example-com');
有点像 Rails 的参数化方法。什么是干净,简单的方法来做到这一点?
如果你想要那个输入的输出,你可以使用一个或三个正则表达式:
var id = email.replace(/@/g, ' at ').replace(/[^a-z0-9-]+/gi, '-')
.replace(/^-|-$/g, '');
首先,我们将 at 符号替换为“at”(带有前导和尾随空格)。然后我们用破折号替换任何非字母数字字符序列。
但是请注意,多个电子邮件地址可以成为同一个 ID。例如,john.doe@example.com
两者john-doe@example.com
都成为john-doe-at-example-com
. 您不应将这些标识符用于 ID,因为它们不是唯一的。
正则表达式replace
应该做,但你真的应该考虑这种方法是否值得做,因为有太多潜在的有效电子邮件地址。
'some.user@example.com'.replace(/[.@]/g ,'-')
来自“有效电子邮件地址”的维基百科:
niceandsimple@example.com
very.common@example.com
a.little.lengthy.but.fine@dept.example.com
disposable.style.email.with+symbol@example.com
user@[IPv6:2001:db8:1ff::a0b:dbd0]
"much.more unusual"@example.com
"very.unusual.@.unusual.com"@example.com
"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com
postbox@com (top-level domains are valid hostnames)
admin@mailserver1 (local domain name with no TLD)
!#$%&'*+-/=?^_`{}|~@example.org
"()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org
" "@example.org (space between the quotes)