某些字符和规则的正则表达式



我正在尝试构建一个正则表达式,以确保给定的字符串只包含这13个特定的字符/规则。我有点麻烦。如有任何帮助,我们将不胜感激。

允许的字符:

  1. a-z
  2. A-Z
  3. 0-9
  4. !(感叹点(
  5. -(连字符(
  6. _(下芯(
  7. 。(期间(
  8. *(星号(
  9. '(单引号(
  10. ((左括号(
  11. )(右括号(
  12. (没有连续空格(
  13. *。(不能以句点结束(

到目前为止,我有这个

/^[+\-0-9((.!-_*']+$/g

但没有得到预期的结果。提前谢谢。

编辑:抱歉第一次在这里发帖。下面是一些测试用例(JS(。第二个不应该通过,因为它有连续的空格,并且以句点结束。:

let testOne = "Testing Regex - 2021 Th*i)s_On(e_pa!'ss.es.end";
let testTwo ="Testing Regex - 2021 Th*i)s_On(e_pa!'ss.es.end  but 
shouldn't.";

testOne.match(/^[+-w().!-_*' ]+$/g);
testTwo.match(/^[+-w().!-_*' ]+$/g);

一些问题:

  • 您的正则表达式不允许使用拉丁字母:您没有列出它们。

  • 正则表达式允许使用一些附加字符(包括$#%(,因为!-*指定了范围

  • 没有规定不允许超过一个空间。

  • 没有规定不允许点作为最后一个字符

  • 当字符串结束标记要求匹配始终与整个输入匹配时,g修饰符没有什么作用。

从正则表达式中,似乎还要求输入至少有1个字符。

综合来看,我们得到了这个:

/^(?!.*? )(?!.*?.$)[w+-().!*' ]+$/

你可以试试这个:

^(?!.*  )[w!()-*'s.]+[w!()-*'s]$

https://regex101.com/r/kTcJUN/3

如果你不想在字符串的末尾使用空格字符,那么:

^(?!.*  )[w!()-*'s.]+[w!()-*']$

解释:

(?!.* )-排除字符串中的双空格

w-任意单词字符。匹配任何字母、数字或下划线。相当于[a-zA-Z0-9_]。

!——字面意思是!

(——字面意思是(

)-字面意思为)

-——字面意思为-

*-字面意思为*

'——字面意思是'

s-空间字符

.-字面意思为.

+-量词。在一次和无限次之间匹配。

[w!()-*'s]-允许从列表中选择一个字符。将其放在$(行尾(之前会使该字符在字符串中最后一个。

最新更新