【问题标题】:What's the best regex for validating a comment in python?在 python 中验证评论的最佳正则表达式是什么?
【发布时间】:2017-02-22 03:36:15
【问题描述】:

我想在我的 django 项目中验证用户的 cmets。 在 cmets 中,这些字符是不允许的: [ * % & ! ='; ` ]

最好的正则表达式是什么?

【问题讨论】:

  • 只是想知道你为什么不允许这些字符?

标签: python regex django validation


【解决方案1】:

非常精确地遵循您的规范,正则表达式 ^[^\[\]*%&!=\';`]*$ 完全符合您的描述。它匹配:

^              the start of the string
[^             any character that is not:
  *%&!=\';`    any of: [ ] * % & ! = ' ; `
]*             0 or more times
$              the end of the string

所以在python中,

import re

pattern = re.compile(r'^[^\[\]*%&!=\';`]*$')
if pattern.match(my_string):
     print('this is a valid comment')
else:
     print('this is an invalid comment')

(请注意,您的用户可能会对他们的 cmets 中为什么不惊呼!也感到困惑。另外,如果您不想匹配空字符串,请使用 + 而不是 *^[^\[\]*%&!=\';`]+$

【讨论】:

    【解决方案2】:

    这将只允许单词和空格。如果它包含特殊字符,它将被丢弃。

    Check this regular expression here

    ^(?!\!\%\!\=\'\;\`)[\w\s\.\?\,]+$
    

    【讨论】:

    • 冒着过于元的风险,这个评论怎么样?由于逗号、问号和句点,您的正则表达式不会匹配它。
    • @KernelPanic 对不起。我不明白。你在说什么?
    • 这个正则表达式不匹配带有一些“有效”字符的 cmets。问号不在不允许的字符列表中,但与您的正则表达式不匹配。
    • @KernelPanic 谢谢。 :) 我做了改变。
    • are 允许的字符列表比允许的列表长得多;)告诉正则表达式“匹配除此列表之外的任何内容”可能会更容易,而不是“仅匹配此列表”。例如,这个正则表达式也允许使用 ^、$ 和 ),但不匹配,这只是我的想法。 Д、ऄ 或 ก 呢?
    猜你喜欢
    • 2013-03-16
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2017-01-22
    • 2020-02-09
    • 2016-05-18
    • 2011-02-13
    相关资源
    最近更新 更多