【问题标题】:How to improve this Regular expression validation?如何改进这个正则表达式验证?
【发布时间】:2020-07-09 13:48:57
【问题描述】:

我尝试为用户的描述文本区域编写表单验证,以了解他们自己的教育或经验。
我为这个文本区域写了这个正则表达式,但是如果用户使用上面的逗号是不允许的,我会遇到问题,例如,如果用户写了“House's”,就不允许写这个逗号'。
P用户描述拥有时可能需要哪些符号或谓词?

我使用了这个正则表达式:

$descriptionValidation = "/^[a-zA-Z0-9\.\-\,\"\(\) ]+[a-zA-Z0-9\.\-\,\"\(\) ]*$/";

【问题讨论】:

  • 这是为了防止 SQL/XSS 注入吗?你也过度转义在字符类.(), 没有特殊含义。正则表达式不允许引号。请提供可重现的例子。 regex101.com/r/AL869r/1 还添加/解释 JS 方面。
  • @user3783243 谢谢它解决了我的问题,再次感谢。

标签: javascript php regex


【解决方案1】:

匹配整个字符串并要求字符串仅包含字母数字字符和:点、逗号、单引号(也称为撇号,但不是“逗号上方”)、双引号、左括号、右括号、空格和连字符,请使用以下表达式。

^$ 元字符确保字符跨越字符串的整个长度。 + 表示列表中的一个或多个任意字符。 “列表”在技术上称为“字符类”。 a-z 是全范围的字母,\d 是全范围的数字。 - 在字符类内部确实具有特殊含义,但前提是它的两侧都有非范围表达式。如果您希望防止字符类中的连字符出现错误,可以添加反斜杠以将其转义,或者可以在字符类的开头或结尾处写连字符,或者可以将其写在字符范围旁边。

/^[a-z\d.,'"() -]+$/i

在 php 中使用单引号声明此模式时,您需要将字符类中的单引号转义。

$descriptionValidation = '/^[a-z\d.,\'"() -]+$/i';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-31
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    相关资源
    最近更新 更多