正则表达式:如何将字符集限制应用于整个表达式

RegEx: How to apply a Character Set restriction to a whole Expression

假设我有一个用于验证电子邮件地址的正则表达式,例如:

/^(([^<>()\[\]\.,;:\s@"]+(\.[^<>()\[\]\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

现在,假设我还想确保以下字符集也适用于整个字符串:

[\x00-\x7F]

我将如何将第二个字符集限制应用于整个模式。

结果是:

您可以在检查字符串的开头后将其添加到正前瞻中:

^(?=[\x00-\x7F]+$)your_pattern_here
 ^^^^^^^^^^^^^^^^^

^检查字符串位置的开始后,(?=[\x00-\x7F]+$)将被执行一次并且要求整个字符串只由ASCII字符组成(注意+匹配1或更多次,并且 $ 测试字符串位置的结尾)。

正则表达式看起来像

^(?=[\x00-\x7F]+$)(([^<>()\[\]\.,;:\s@"]+(\.[^<>()\[\]\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$

regex demo