我需要帮助为一个字符串编写一个正则表达式,该字符串应该包含字母数字符号,并且只包含其中一个:#,?,$,%
例如: abx12A#我们还可以,但 fsa?#ds 不行
我试过像 / [a-zA-z0-9] [#?$%] {0,1} / 这样的东西,但它不起作用。 有任何想法吗? 感谢
答案 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)
试试这个
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;
答案 3 :(得分:1)
如果特殊字符可以在字符串的开头或结尾处,您可以使用前瞻:
^(?=[^#?$%]*[#?$%]?[^#?$%]*$)[a-zA-Z0-9#?$%]+$
答案 4 :(得分:1)
tr
/^(?=[^#?$%]*[#?$%]?[^#?$%]*$)[a-zA-Z0-9#?$%]*$/