0

我有以下正则表达式来检查相对 url 有一个函数可以检查 url 并在其正常时返回 true,以下工作:

MyCustomPage.aspx?name=John&last=smith&type=Person

但是,当我的姓氏中有两个以上的单词并用空格分隔时,以下情况会返回 false

MyCustomPage.aspx?name=John&last=smith+connors&type=Person

看到+connors,这不会评估...但是如果我删除检查..它会很好..

这是正则表达式

Regex IsRelative = new Regex(@"^([a-zA-Z0-9]+)+\.[a-zA-Z/]*(((\?)([a-zA-Z]*=\w*)){1}((&)([a-zA-Z]*=\w*))*)?$");

在我的函数中,我根据该正则表达式检查 url 是否有效

IsRelative(MyUrl)

如果那里有空间,我需要它让它通过,但我不确定如何......任何帮助将不胜感激。

4

3 回答 3

1

您应该允许加号 (+) 作为参数值:

Regex IsRelative = new Regex(@"^([a-zA-Z0-9]+)+\.[a-zA-Z/]*(((\?)([a-zA-Z]*=[\w\+]*)){1}((&)([a-zA-Z]*=[\w\+]*))*)?$");

在这里,我更改\w[\w\+],其中正则表达式检查参数值。通过此更改,您将允许在每个参数的等号 (=) 右侧具有加号 (+) 的 url。

于 2012-08-28T19:58:40.627 回答
1

在您的正则表达式中,您使用 \w 来匹配名称/值对中 = 之后的任何内容。但是,由于您正在处理一个 URL,您要么需要对其进行解码,要么考虑 + 不是 \w 字符类的一部分这一事实。

于 2012-08-28T19:58:50.237 回答
1

试试http://www.regexplanet.com/advanced/java/index.html 这是一个正则表达式测试页面。

您的问题的问题是“加号”是一个正则表达式保留符号。您必须放置一个“反斜杠”来处理它。

^name=([A-Za-z]+)&last=([A-Za-z+]+)&type=([A-Za-z]+)$

于 2012-08-28T20:01:59.697 回答