【发布时间】:2013-04-23 17:41:48
【问题描述】:
我有这个 HTML pattern="[a-zA-Z0-9-_. ]{1,30}" 中的模式示例。这意味着只允许字母数字和-_.,但我想制作一个类似于preg_replace 的模式,它允许所有内容,但不允许[ <>/\:*?"|]。
那我该怎么办呢?
【问题讨论】:
我有这个 HTML pattern="[a-zA-Z0-9-_. ]{1,30}" 中的模式示例。这意味着只允许字母数字和-_.,但我想制作一个类似于preg_replace 的模式,它允许所有内容,但不允许[ <>/\:*?"|]。
那我该怎么办呢?
【问题讨论】:
您可以尝试以下方法:
$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 />
【讨论】:
正则表达式中的负字符类是这样完成的:[^characters to exclude]
注意[ 中的^,这就是它是否定的原因。
也就是说,你可能应该坚持你所拥有的,否则你会得到像我这样的人试图输入ヴィックサ的名字:p
【讨论】:
字符类中的^ 运算符将否定整个类,因此您可以使用:
[^<>/\:*?"|]
这将匹配所有除了字符类中的那些字符。请记住,如果pattern 属性的引号也是",您可能必须转义"。
【讨论】:
" 可能需要转义。如果周围的引号是".