React native:如何避免双重特殊字符?
React native: how to avoid double special characters?
我有一个代表一些标题的文本输入。允许使用字母和数字。以及 一些 特殊字符。例如:
"Don't use" -> valid sequence
"Don''t use" -> invalid sequence
"Don'?!%^t use" -> invalid sequence
"Be quiet!" -> valid sequence
"Be quiet!><" -> invalid sequence
"123 Your name?" -> valid sequence
"123 Your name?;'" -> invalid sequence
也就是说,如果文本输入包含字母、数字和 ONE 个字符 '?!
我认为我的文本输入是有效的。如果文本输入包含来自其他特殊字符的 any OR 连续两个来自允许的特殊字符,我认为它是无效的。
我的正则表达式应该是什么?
我在想我应该做两个测试。例如:
var notAllowedCharacters = /[ `@#$%^&*()_+\-=\[\]{};:"\|,.<>\/~]/;
if (notAllowedCharacters.test(text)) {
//do somethin
}
然后再测试:
var alowedCharacters = /[ `'?!]/;
//how do I test if these characers are allowed to be used only surrounded by letters?
if (alowedCharacters.test(text)) {
//do something
}
欢迎提出任何想法!
如果在“单词”之间只能出现所列字符中的 1 个,并且可以选择除末尾 space 以外的字符:
^\w+(?:[ `'?!]\w+)*[`.?!]?$
说明
^
字符串开头
\w+
匹配1+个单词字符
(?:[ `'?!]\w+)*
可选择重复列出的字符中的 1 个,然后再重复 1 个以上的单词字符,这样就不会出现 2 个相邻的字符。
[`.?!]?
可选择匹配列出的字符中的 1 个
$
字符串结束
const regex = /^\w+(?:[ `'?!]\w+)*[`.?!]?$/;
[
"Don't use",
"Don''t use",
"Don'?!%^t use",
"Be quiet!",
"Be quiet!><",
"123 Your name?",
"123 Your name?;'"
].forEach(s => console.log(`${s} --> ${regex.test(s)}`));
我有一个代表一些标题的文本输入。允许使用字母和数字。以及 一些 特殊字符。例如:
"Don't use" -> valid sequence
"Don''t use" -> invalid sequence
"Don'?!%^t use" -> invalid sequence
"Be quiet!" -> valid sequence
"Be quiet!><" -> invalid sequence
"123 Your name?" -> valid sequence
"123 Your name?;'" -> invalid sequence
也就是说,如果文本输入包含字母、数字和 ONE 个字符 '?!
我认为我的文本输入是有效的。如果文本输入包含来自其他特殊字符的 any OR 连续两个来自允许的特殊字符,我认为它是无效的。
我的正则表达式应该是什么?
我在想我应该做两个测试。例如:
var notAllowedCharacters = /[ `@#$%^&*()_+\-=\[\]{};:"\|,.<>\/~]/;
if (notAllowedCharacters.test(text)) {
//do somethin
}
然后再测试:
var alowedCharacters = /[ `'?!]/;
//how do I test if these characers are allowed to be used only surrounded by letters?
if (alowedCharacters.test(text)) {
//do something
}
欢迎提出任何想法!
如果在“单词”之间只能出现所列字符中的 1 个,并且可以选择除末尾 space 以外的字符:
^\w+(?:[ `'?!]\w+)*[`.?!]?$
说明
^
字符串开头\w+
匹配1+个单词字符(?:[ `'?!]\w+)*
可选择重复列出的字符中的 1 个,然后再重复 1 个以上的单词字符,这样就不会出现 2 个相邻的字符。[`.?!]?
可选择匹配列出的字符中的 1 个$
字符串结束
const regex = /^\w+(?:[ `'?!]\w+)*[`.?!]?$/;
[
"Don't use",
"Don''t use",
"Don'?!%^t use",
"Be quiet!",
"Be quiet!><",
"123 Your name?",
"123 Your name?;'"
].forEach(s => console.log(`${s} --> ${regex.test(s)}`));