我有一個代表一些標題的文本輸入。允許使用字母和數字。以及一些特殊字符。例如:
"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
也就是說,如果文本輸入包含字母、數字和一個字符,'?!我認為我的文本輸入是有效的。如果文本輸入包含其他特殊字符中的任何字符或允許的特殊字符中的兩個連續字符,我認為它是無效的。
我的正則運算式應該是什么?
我在想我應該做兩個測驗。例如:
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
}
歡迎任何想法!
uj5u.com熱心網友回復:
如果列出的字符中只有 1 個可以出現在 "words" 和可選的字符之間,除了末尾的空格:
^\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)}`));
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/475086.html
