我需要一个正则表达式来满足以下要求:
匹配:
"Hello world."
"Hello World. This is ok."
不匹配:
" Hello World. "
"Hello world 123."
"Hello world."
这适用于我的情况
<asp:RegularExpressionValidator ID="revDescription" runat="server"
ControlToValidate="taDescription" Display="Dynamic" ErrorMessage="Invalid Description."
Text=" "
ValidationExpression="^(?i)(?![ ])(?!.*[ ]{2})(?!.*[ ]$)[A-Z. ]{8,20}$"></asp:RegularExpressionValidator>
答案 0 :(得分:2)
这是Python中的一个解决方案,使用anchors和negative lookahead assertions来确保遵循空白规则:
regex = re.compile(
"""^ # Start of string
(?![ ]) # Assert no space at the start
(?!.*[ ]{2}) # Assert no two spaces in the middle
(?!.*[ ]$) # Assert no space at the end
[A-Z. ]{8,20} # Match 8-20 ASCII letters, dots or spaces
$ # End of string""",
re.IGNORECASE | re.VERBOSE)
答案 1 :(得分:0)
我建议检查正则表达式之外的长度,否则表达式可能会变得太复杂。
以下是JavaScript中的示例代码段:
if (str.length < 8 || str.length > 20)
return false;
if (str.match(/(^\s|\s$|\s\s|[^A-Za-z.\s])/))
return false;
正则表达式检查任何禁用模式的匹配:
^\s
开头的空白\s$
最后的空白\s\s
两个连续的空白字符[^A-Za-z.\s]
一个不是字母,句号或空格的字符如果只允许空格(ASCII 32),而不允许使用制表符或其他空白字符,则可以用文字空格字符替换所有\s
。
另一个解决方案是结合使用“正面”表达来检查允许的字符和长度,使用“否定”表达来排除被拒绝的模式:
return str.match(/[A-Za-z. ]){8,20}/) && !str.match(/(^ | $| )/);
更新:如果您需要将所有内容放入单个表达式中,我担心您必须省略对连续空格的检查,因为此限制会使语言对上下文敏感,因此无法通过正则表达式检查。您可以做的是检查以字母开头的字符串,后跟6到18个字母,点或空格,并以字母结尾:
[A-Z][A-Z. ]{6,18}[A-Z]