【问题标题】:Use of pattern attribute in HTML input在 HTML 输入中使用模式属性
【发布时间】:2013-04-23 17:41:48
【问题描述】:

我有这个 HTML pattern="[a-zA-Z0-9-_. ]{1,30}" 中的模式示例。这意味着只允许字母数字和-_.,但我想制作一个类似于preg_replace 的模式,它允许所有内容,但不允许[ <>/\:*?"|]

那我该怎么办呢?

【问题讨论】:

    标签: php html input inverse


    【解决方案1】:

    您可以尝试以下方法:

    $test = "Hello [<>/\:*?\"|Mister] Jean-Samuels, how are you?_.";
    echo preg_replace('/[^\d\w-_. ]+/', '', $test);
    

    输出:

    Hello Mister Jean-Samuels how are you_.
    

    编辑:

    这是您的 HTML 模式的JSFiddle

    HTML:

    <input title='Enter anything but <, >, /, \, :, *, ?, ", |' 
    type='text' 
    pattern='[^<>\/\\:*?"|]{1,30}' required />
    

    【讨论】:

    • 大家好,谢谢你的答案,但我不是在谈论 php 代码中的正则表达式,我说的是在我之前尝试使用 char ^ 排除一些的 HTML 模式中放置一个正则表达式字母,但它确实以 HTML 模式工作...
    【解决方案2】:

    正则表达式中的负字符类是这样完成的:[^characters to exclude]

    注意[ 中的^,这就是它是否定的原因。

    也就是说,你可能应该坚持你所拥有的,否则你会得到像我这样的人试图输入ヴィックサ的名字:p

    【讨论】:

    • 但是如果我的名字是ヴィックサ呢? :((不是)
    【解决方案3】:

    字符类中的^ 运算符将否定整个类,因此您可以使用:

    [^<>/\:*?"|]
    

    这将匹配所有除了字符类中的那些字符。请记住,如果pattern 属性的引号也是",您可能必须转义"

    【讨论】:

    • 我认为必须对其中一些字符进行转义才能使它们工作。
    • @Hexodus 确实与上下文无关。但是是的," 可能需要转义。如果周围的引号是".
    猜你喜欢
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2014-02-28
    • 2021-05-24
    • 2018-02-21
    相关资源
    最近更新 更多