我想为字段创建一个 HTML 模式作为(显示名称)。没有更复杂的文件,只有一个包含一个字段的 HTML 文件。
要求是:
我可以编写符合大多数要求的正则表达式,但不包含特殊字符。
^[A-Z][a-z]*( [A-Z][a-z]*)*$
但是我想在任何地方使用特殊字符和数字(第一个字母除外),并且问题发生在这里,这就是模式:
^[A-Z][a-z0-9@()\[\]{}._\-!#$%&'*+\/=?^`|~]*( [A-Z][a-z0-9@()\[\]{}._\-!#$%&'*+\/=?^`|~]*)*$
我在控制台上收到此错误:
this causing this error: Unable to check <input pattern=‘^[A-Z][a-z0-9@()\[\]{}._\-!#$%&'*+\/=?^|~]*( [A-Z][a-z0-9@()\[\]{}._\-!#$%&'*+\/=?^|~]*)*$’> because ‘/^[A-Z][a-z0-9@()\[\]{}._\-!#$%&'*+\/=?^|~]*( [A-Z][a-z0-9@()\[\]{}._\-!#$%&'*+\/=?^|~]*)*$/v’ is not a valid regexp: invalid character in class in regular expression
我尝试了很多其他的事情,但是使用特殊字符对我来说是一个麻烦。您能告诉我正确的模式是什么吗?
谢谢。
这是整个代码:
const registrationForm = document.querySelector('#registration-form');
registrationForm.onsubmit = e =>
{
e.preventDefault(); // 4 testing mode
console.clear();
console.log( ':) name accepted ', registrationForm.display_name.value);
}
<form id="registration-form">
<!-- Display Name Field -->
<label for="display-name">Display Name:</label>
<input type="text" id="display-name" name="display_name" pattern="^[A-Z][a-z0-9@()[\]{}._\-!#$%&'*+/=?^`|~]*(( [A-Z][a-z0-9@()[\]{}._\-!#$%&'*+/=?^`|~]*)| (?! )[a-zA-Z0-9@()[\]{}._\-!#$%&'*+/=?^`|~]*)*$" title="Display name must start with a letter, have no consecutive spaces, and each word must start with an uppercase letter. Length must be between 2 and 50 characters."
minlength="2" maxlength="50" required>
<br><br>
<button type="submit">Submit</button>
</form>
问题在于正则表达式中转义和定义特殊字符的方式。具体来说,字符集中的 ] 字符(括在方括号 [] 中)必须正确转义,因为它是表示字符集结尾的元字符。
这是更正后的正则表达式:
^[A-Z][a-z0-9@()[\]{}._\-!#$%&'*+/=?^`|~]*( [A-Z][a-z0-9@()[\]{}._\-!#$%&'*+/=?^`|~]*)*$
尝试:
^[A-Z](?:[a-z0-9@()\[\]{}._\-!#$%&'*+\/=?^`|~]|\s[A-Z0-9@()\[\]{}._\-!#$%&'*+\/=?^`|~])*$
参见:regex101
说明
^...$
:锚定以确保整个字段匹配[A-Z]
:第一个大写字母(?: ... )*
:然后重复
[a-z0-9@()\[\]{}._\-!#$%&'*+\/=?^`|~]
:小写或特殊字符|
:或\s[A-Z0-9@()\[\]{}._\-!#$%&'*+\/=?^`|~]
:空格后跟大写或特殊字符不清楚你所说的“特殊字符”是什么意思。 我选择将其定义为任何非以下内容:大写或小写字母、数字或空格。
^\p{Lu}[^\p{Lu}\p{Z}]*(?:\p{Z}[^\p{Ll}\p{Z}][^\p{Lu}\p{Z}]*)*$
只需编辑
[
...]
之间的位即可更改定义以排除更多。
有关 unicode 字符类别的信息,请参阅: https://www.unicode.org/versions/Unicode16.0.0/core-spec/chapter-4/#G124142