文本框的正则表达式最大和最小长度字符

3

我使用Asp.net和C#。

我需要强制用户在一个文本框控件中只输入4到128个字符的文本。

我想使用一个验证表达式属性用于验证控件。

你能指出一个正确的正则表达式吗?

注意:我现在正在使用这段代码,但如果文本框中有双空格或换行符,它似乎无法正常工作。

ValidationExpression="^.{4,128}$"

感谢您抽出时间阅读这篇文章!
3个回答

5

您的表达是正确的。只需使用Singleline修饰符,使点号也匹配换行符。

RegexOptions.Singleline

作为内联修饰符,也可以这样使用。
"^(?s)(.){4,128}$"

RegexOptions 枚举
正则表达式选项


谢谢stema,抱歉让我再明确一下,我应该使用你在评论中发布的^(.|\n|\r){4,128}$版本还是另一个版本?这两个版本有什么区别?再次感谢。 - GibboK
我更喜欢我的答案版本。不同之处在于Singleline修饰符将\r\n包含在.中,而在另一个版本中,您需要通过显式编写它们来完成此工作。我认为在您的简单情况下,这是品味问题,但是当您有一个更大的表达式时,使用修饰符更好,因为您不能忘记在某个地方写下换行符。 - stema

2

点号应该匹配除了回车符和换行符之外的任何单个字符。为什么你使用了\r呢?感谢您在此事上花费的时间。 - GibboK
好的,在我的引用中只提到了\n。你可以加上它以确保安全 (.|\n|\r|\t){4,128}$。然而,这可能意味着\r\n都被认为是一个字符。你可以尝试这个:(.|(\n|\r|\r\n|\n\r)|\t){4,128}$。看起来有点奇怪,但我想它会完成工作! - Tim S.
点号可以匹配除了换行符以外的任何字符。在表达式中不需要添加\t。只需要使用^(.|\n|\r){4,128}$即可,不需要在交替中列出\n\r的排列组合,但是每个字符都会被计算。 - stema
这就是为什么我添加了所有可能的换行符,以确保它们被计算为一个字符而不是两个字符。通常我不会这样做,但为了他的项目,这是最好的方法。你关于制表符的想法可能是正确的。 - Tim S.

0

尝试使用这个 ValidationExpression = ^(\w*)(\s*)(.*){4,128}$" 它也会包括句号和空格。


你可能需要添加\t..我认为制表符不被视为多个空格。 - SShebly
1
\s 包括制表符。但是你的表达式只接受任意数量的 \w 字符,然后是任意数量的 \s 字符,最后是除换行符以外的任意字符,并在最后一部分放置 {4,128} 量词(你接受 4 到 128 次任意数量的任何字符?)。这绝对不是 OP 想要的。 - stema
谢谢...你的版本和stema的^(.|\n|\r){4,128}$有什么区别? - GibboK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接