【问题标题】:Regex for only allowing letters, numbers, space, commas, periods?正则表达式只允许字母、数字、空格、逗号、句点?
【发布时间】:2014-07-14 19:31:25
【问题描述】:

我对正则表达式一无所知,因为它对我来说很复杂。我正在使用一个基于正则表达式限制用户输入的程序。我目前正在使用只允许用户输入的正则表达式:

A-Z and a-z
0-9
.
,
!
?

所以基本上是典型段落或网络文章中的任何内容。

程序声明“输入一个正则表达式,输入的文本必须匹配(使用 preg_match 评估,使用 s 和 i 标志)才能有效。”

我已经尝试过这个正则表达式但没有成功,我目前正在寻找其他人尝试。

 '/^[a-zA-Z0-9,.!? ]*$/'

它应该允许一个简单的句子,例如

“嗨,我叫约翰!我喜欢吃苹果、橙子和葡萄。你愿意和我一起吃吗?

【问题讨论】:

  • . 是一个特殊字符。你需要逃避它:\.
  • 不,. 不需要在 [] 字符类中转义。
  • 您好像忘记了!?
  • 您使用什么输入字符串测试您在上面发布的模式?根据您的标准,它基本上是正确的,除了它允许零长度字符串并省略 !?
  • 对不起,我添加了!和 ?在我测试了那个字符串之后,我忘记了那些。那是更新后的字符串,我需要一个正则表达式来处理它。

标签: php regex


【解决方案1】:

^[\.a-zA-Z0-9,!? ]*$

是什么正则表达式,它可以工作,请参阅示例网站来测试正则表达式。

【讨论】:

    【解决方案2】:

    你也可以使用 '/^[\w .,!?]+$/'

    字母数字元字符 \w 等价于字符范围 [A-Za-z0-9_]

    例如:

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      if (empty($_POST["message"])) {
        $messageErr = "Message cant be empty";
      } elseif (preg_match('/^[\w .,!?()]+$/', $message) === false){
        $messageErr = "Only aA-zZ09.,!?_ are allowed";
      } else {
        $message = data($_POST["message"]);
      }
    }
    function data($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
    }
    # Do something with $message
    

    【讨论】:

      【解决方案3】:

      您甚至不需要 a-z 或 0-9。 "[\w,.!?]" 应该工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-29
        • 2022-01-14
        • 1970-01-01
        相关资源
        最近更新 更多