【问题标题】:preg_match allowing only capital letters, numbers, space and characters(.,/-) in phppreg_match 在 php 中只允许大写字母、数字、空格和字符(.,/-)
【发布时间】:2018-05-16 12:41:22
【问题描述】:

如果用户输入的地址包含大写字母、数字、空格和字符 .,/- ,我想匹配,但它接受所有特殊字符并且不遵循 preg_match。我的代码中的错误在哪里,你能给我一些关于preg_match的易于学习的教程吗?我试过用谷歌搜索它,但到目前为止我发现的都很复杂。下面是我的代码

$address = $_POST["address"];

if (!preg_match("([^A-Z0-9 ".preg_quote(".,/-")."])",$address))
{
  $addressError = "*Address contains special characters that are not allowed";
}

【问题讨论】:

    标签: php html


    【解决方案1】:

    过于复杂

    $address = $_POST["address"];
    
    if (!preg_match("/^[0-9A-Z .\/,-]+$/",$address))
    {
      $addressError = "*Address contains special characters that are not allowed";
    }
    

    这是一个很好的资源: https://regexr.com/

    将鼠标悬停在事物上也会告诉您它们在做什么。

    建议。您总是希望在表单提交之前给用户反馈。因此,在使用数据之前,您应该始终在后端进行验证,但建议在 javascript 或 HTML5 的输入字段上的新属性“模式”中进行此类检查。

    <input type="text" name="address" id="address" pattern="[0-9A-Z ./,-] oninvalid="setCustomValidity('Address may only been digits, upper case, period, forward slash, comma and/or hyphen characters')"/>

    【讨论】:

    • 您需要转义点,因为点表示任何字符。而空间实际上是\s
    • 点固定,但不,您可以在 php 正则表达式中使用空格字符。
    • 我建议你也删除尾随和前导斜杠
    • 能否说明原因?
    • pl.php.net/manual/en/regexp.reference.delimiters.php,如果您想提交答案,我们非常欢迎。 PHP 正则表达式需要某种分隔符开始和结束模式。
    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 2013-08-09
    相关资源
    最近更新 更多