用于忽略除 space 和连字符之外的所有特殊字符的 JS 正则表达式

JS Regex for ignoring all special characters but space and hyphen

使用 "test" 函数,我想检查仅字母 (a-zA-Z) 字符串是否包含空格和连字符以外的任何特殊字符。

请注意,我在 JavaScript.

中使用此正则表达式

应该匹配:

- string = A B
 - string = A-B
 - string = ABC XYZ-ASD A

不应该匹配:

 - string = ABC*
 - string = AB IC-B_
 - string = AB C$%^
 - string = - //hyphen/s only
 - string = ABC-

目前,我的正则表达式是:

/[a-z][\s|-][a-z]/i

有人可以建议对此进行更改以忽略那些特殊字符的情况。

谢谢!

您可以使用包含 a-z、空格和连字符的字符 class,并检查整个字符串是否仅由这些字符组成,方法是从字符串 (^) 到末尾 ($):

const re = /^[a-z -]+$/i;
[
  'A-B',
  'ABC XYZ-ASD A',
  'ABC*',
  'AB IC-B_',
  'AB C$%^'
].forEach((str) => {
    console.log(
      str + ' ' + (re.test(str) ? 'Pass' : 'Fail')
    )
  });

为了额外确保字符串不由所有连字符组成,从字符串的开头开始负前瞻 - 重复直到字符串的结尾:

const re = /^(?!-+$)[a-z -]+$/i;
[
  'A-B',
  'ABC XYZ-ASD A',
  'ABC*',
  'AB IC-B_',
  'AB C$%^',
  '--------'
].forEach((str) => {
    console.log(
      str + ' ' + (re.test(str) ? 'Pass' : 'Fail')
    )
  });

你期待这样的事情吗?

^[a-zA-Z-\s]*$

已更新:

^[a-zA-Z\s]+-*[a-zA-Z\s]*$