修复正则表达式

时间:2016-11-01 12:28:38

标签: regex

我需要帮助为一个字符串编写一个正则表达式,该字符串应该包含字母数字符号,并且只包含其中一个:#,?,$,%

例如: abx12A#我们还可以,但 fsa?#ds 不行

我试过像 / [a-zA-z0-9] [#?$%] {0,1} / 这样的东西,但它不起作用。 有任何想法吗? 感谢

5 个答案:

答案 0 :(得分:3)

类似的东西:

^[a-zA-Z0-9]*[#?$%]?[a-zA-Z0-9]*$

应该做的伎俩(并且,根据您的正则表达式引擎,您可能需要转义一个或多个这些特殊字符。)

“alpha”类的基本上为零或更多,其次是“特殊”类的零或一,再次是零或更多“alpha”。

你可以根据自己的需要调整每个角色类中包含的内容,但这是获取其他内容之一的一般方法。

答案 1 :(得分:1)

如果您还需要匹配空字符串,则需要使用

^[a-zA-Z0-9]*(?:[#?$%][a-zA-Z0-9]*)?$

请参阅regex demo

<强>详情:

  • ^ - 字符串开头
  • [a-zA-Z0-9]* - 零个或多个字母数字
  • (?:[#?$%][a-zA-Z0-9]*)? - 恰好出现1次:
    • [#?$%] - 来自集合
    • 的字符
    • [a-zA-Z0-9]* - 零个或多个字母数字
  • $ - 字符串结尾

注意:[A-z] is a common typo导致严重问题。

如果您不想允许空字符串,请将*替换为+

^[a-zA-Z0-9]+(?:[#?$%][a-zA-Z0-9]+)?$
            ^                    ^

答案 2 :(得分:1)

试试这个

&#13;
&#13;
const regex = /^[a-zA-z0-9]*[#?$%]?[a-zA-z0-9]*$/

const perfectInputs = [
  'abx12A#we',
  'a#',
  '#a',
  'a#a'
]

const failedInputs = [
  'fsa?#ds'
]

console.log('=========== test should be success ============')
for (const perfectInput of perfectInputs) {
  const result = regex.test(perfectInput)
  console.log(`test ${perfectInput}: ${result}`)
  console.log()
}

console.log('=========== test should be failed ============')
for (const failedInput of failedInputs) {
  const result = regex.test(failedInput)
  console.log(`test ${failedInput}: ${result}`)
  console.log()
}
&#13;
&#13;
&#13;

答案 3 :(得分:1)

如果特殊字符可以在字符串的开头或结尾处,您可以使用前瞻:

^(?=[^#?$%]*[#?$%]?[^#?$%]*$)[a-zA-Z0-9#?$%]+$

答案 4 :(得分:1)

tr
/^(?=[^#?$%]*[#?$%]?[^#?$%]*$)[a-zA-Z0-9#?$%]*$/