如何从动态创建的URL中删除点

时间:2018-02-19 09:30:45

标签: regex perl

在我的应用程序中,我们有一个模板;用户可以编辑然后将其保存到DB。然后,我们的应用程序使用模板发送电子邮件邀请。

以下是草稿模板:

Dear {USER FIRST NAME} {USER LAST NAME}: 

{COLLEGE NAME} is providing your access to `example` services, including a dedicated online account. Registration was started for you. 

Without delay, please finish the last few items of your registration. 

Please promptly
finish your registration here: {REGISTRATION URL} 

Also, please {LOG IN} for the first time, to be sure you encounter no issues. If you have questions, Support@example.com is available to help. Once you finish registration, access to your secure account and related example member services will stay with you as you proceed through learning experiences, within and beyond coursework. Thank you

在发送邀请之前,应用程序正在用真实用户数据替换KEYS。例如,{USER FIRST NAME}替换为RAHUL,依此类推。

我面临的问题是......用户编辑模板并在{REGISTRATION URL}的末尾添加一个点(。)。

就像这样:

Please promptly finish your registration here: {REGISTRATION URL}.

因此,最终证实是电子邮件正文中的https://www.example.com/reg?invite_id=1f2sdfg23.。邀请代码现在已损坏。这会给用户带来问题,因为它们会显示错误消息。邀请找不到页面。

我怎样才能包含这种情况。我们告知用户不要这样做,但即使用户在不知不觉中这样做,我也希望能够抢占这种情况。我不希望在1f2sdfg23之后出现任何非字母数字字符。它应该始终跟一个换行符。

我尝试了下面的常规表达:

    $email_body =~ s/\{REGISTRATION URL\}([^a-zA-Z])/$registration_url/ieg;

这适用于dot的一个实例。

如果用户输入多个点,该怎么办? Please promptly finish your registration here: {REGISTRATION URL}... {REGISTRATION URL}# etc..

$email_body =~ s/\{REGISTRATION URL\}([^a-zA-Z]+)/$registration_url/ieg;

如果我通过允许多个字符来扩展过滤器,那么它将删除不需要的字符。但是当用户及时给出{REGISTRATION URL}时,问题就会重新出现。上面的代码行将删除行间距。我不希望这种情况发生。

让我知道我可以在这里应用的最佳方法。 在此先感谢。

3 个答案:

答案 0 :(得分:1)

正如评论中所写 - 我可以看到两个解决方案

1)在变量

之后添加一个空格
($email_body =~ s/\{REGISTRATION URL\}/$registration_url.' '/ieg;) 

2)用空格替换不是空格的所有东西

($email_body =~ s/\{REGISTRATION URL\}\S+/$registration_url/ieg)

答案 1 :(得分:1)

一个常见的惯例是在<brokets>中以纯文本格式显示网址,以准确显示网址的开始和结束位置。

No misunderstanding: <http://stackoverflow.com/>!

答案 2 :(得分:0)

也许最好的方法是在开始替换这些变量的过程之前检查您的文件。如果您希望该行为finish your registration here: {REGISTRATION URL},那么您可以检查该行是否符合您的期望:$checkEmailTag =~ /\s\{REGISTRATION URL\}$/。在这种情况下,前面的空格,然后是你的标签,然后是行的末尾。

如果不是,那么您可以抛出一个错误,说明您的文件已损坏并中止该过程,或添加一个空格,以便用户角色不会损害您的URL,从而允许您继续,或您看到的任何其他行动配合。

您不需要为文件中的每个变量执行此操作,只需针对此类关键变量。