正则表达式验证

本文关键字:验证 正则表达式 | 更新日期: 2023-09-27 18:19:53

大家好,我看过很多版本的正则表达式验证,但在输入任何文本之前,它只允许在开头输入某些字母,因此如果不输入该文本,则无法输入任何内容,因为它将显示验证。例如,我尝试过:

[Required]
[RegularExpression("^(?:[www.]|a-z|A-Z|)*$", /*This allows the www. only and nothing else*/ ErrorMessage = "Cars Only")]
public string Cars { get; set; }

我试过:

[Required]
[RegularExpression("^(?:(ht|f)tp(s?))'://){1}'S+)|a-z|A-Z|)*$", /*This does not work*/
ErrorMessage = "Cars Only")]
public string Cars { get; set; }

很多其他人也不过多贴就会变成长贴。

有什么帮助吗?在www.之后,可以键入任何内容,但如果没有输入www.,则会显示错误消息。

正则表达式验证

"www."匹配:

www'..* // no line start/end criteria
^www'..*$ // line start/end enforced

这里有一个处理前缀的更全面的表达式:

^(https?|ftp):'/'/www'..*$

这将匹配:

http://www.test.com 
https://www.test.com 
ftp://www.test.com/test

更好的是,这使得前缀是强制性的,但"www."是可选的:

^(https?|ftp)':'/'/(www'.)?.*$

这将匹配:

http://www.test.com
https://www.test.com
ftp://www.test.com/test
http://test.com
https://test.com
ftp://foo.org

仅匹配图像

^(https?|ftp)':'/'/(www'.)?.*'/['w'-'+'%]*'.(gif|jpg|jpeg|png)$

这将匹配:

ftp://foo.org/test.png
https://test.com/image.jpg
http://www.bar.com/my-image.png
http://foo.org/my%20image.jpeg
http://foo.org/my%20image%20test_foo.jpeg

这需要一个开头的前缀、一个正斜杠、一个文件名(允许使用字母数字字符、下划线、短划线和包含%或+的URL编码值)和一个有效的图像扩展名。

这不是万无一失的!请记住,可以从任何HTTP处理程序提供图像。URL中可能没有任何与图像相关的内容。

附加信息

我同意@RussCam的建议,看看jQuery验证器的源代码,看看实际上有多少可能性。

用户输入的URL可能是有效的,但不存在;这可以通过一个简单的请求在服务器端进行检查。

如果您经常需要创建正则表达式,我推荐RegexBuddy。

我还推荐RegExr进行快速在线测试。

根据您的标准,

[Required]
[RegularExpression(@"^www'..+$", ErrorMessage = "Cars Only")]
public string Cars { get; set; }

您可以在nregex上使用此regex来查看哪些匹配,哪些不匹配。

我怀疑您正在查找与有效URI匹配的正则表达式?如果是,我会为客户端使用regex(查看jQuery validate中的url规则),并为服务器端创建一个Validation属性,该属性将字符串传递到Uri.IsWellFormedUriString(string uri, UriKind.Absolute)

拆分所需的部分(即使www.可选,然后使其后面的部分可选,但不依赖于www.

[Required]
[RegularExpression("^(?:[www.])(?:|a-z|A-Z|)*$", /*This allows the www. only and nothing else*/ ErrorMessage = "Cars Only")]
public string Cars { get; set; }