在字符串开头匹配特殊字符所需的正则表达式

Regex needed for matching special characters at start of string

本文关键字:正则表达式 特殊字符 字符串 开头      更新时间:2023-09-26

我需要修改我现有的正则表达式以支持字符串值开头的特殊字符。

我目前有这个表达式:

/^(?=.*[a-zA-Z])(?=.*'d)(?=.*[!@#$%^&*()_+])[A-Za-z'd][A-Za-z'd!@#$%^&*()_+.]{7,63}$/

它接受任何介于 8-64 个字符之间的字符串,其中至少有 1 个数字、字母和以下特殊符号:!@#$%^&*()_+。

如何让它识别输入值开头的特殊字符?

要匹配的字符串:

.abc@1234
*abc@1234
abc@1234.
a@b.c1234

谢谢

您需要

删除[A-Za-z'd]并将{7,63}替换为{8,64}

^(?=.*[a-zA-Z])(?=.*'d)(?=.*[!@#$%^&*()_+])[A-Za-z'd!@#$%^&*()_+.]{8,64}$

查看演示

也许,您还希望将.添加回前瞻,以便还需要:

^(?=.*[a-zA-Z])(?=.*'d)(?=.*[!@#$%^&*()_+.])[A-Za-z'd!@#$%^&*()_+.]{8,64}$
                                         ^

要确保特殊符号不会立即连续出现,请添加(?!.*[!@#$%^&*()_+.]{2})负前瞻

^(?=.*[a-zA-Z])(?=.*'d)(?=.*[!@#$%^&*()_+.])(?!.*[!@#$%^&*()_+.]{2})[A-Za-z'd!@#$%^&*()_+.]{8,64}$
                                            ^^^^^^^^^^^^^^^^^^^^^^^^

查看此演示

请注意,这里的很多人会抱怨使用这么长的正则表达式的可维护性问题。您可以将条件拆分为单独的代码段,也可以使用带有注释的多行正则表达式:

var rx = RegExp("^" + // Start of string
               "(?=.*[a-zA-Z])" + // Require a letter
               "(?=.*''d)" + // Require a digit
               "(?=.*[!@#$%^&*()_+])" + // Require a special symbol
               "(?!.*[!@#$%^&*()_+.]{2})" + // Disallow consecutive special symbols
               "[A-Za-z''d!@#$%^&*()_+.]{8,64}" + // 8 to 64 symbols from the set
               "$");

var re = RegExp("^" + // Start of string
               "(?=.*[a-zA-Z])" + // Require a letter
               "(?=.*''d)" + // Require a digit
               "(?=.*[!@#$%^&*()_+])" + // Require a special symbol
               "(?!.*[!@#$%^&*()_+.]{2})" + // Disallow consecutive special symbols
               "[A-Za-z''d!@#$%^&*()_+.]{8,64}" + // 8 to 64 symbols from the set
               "$", "gm");
var str = '.abc@1234'n*abc@1234'nabc@1234.'na@b.c1234'n*abc@1234'nabc@1234.'na@b.c1234'na@b.#c123'na@__c1234';
while ((m = re.exec(str)) !== null) {
  document.body.innerHTML += m[0] + "<br/>";
}