寻找一个正则表达式来验证所有可打印字符。这个正则表达式需要仅在JavaScript中使用。我已经查阅了这篇文章,但它主要讨论了.net、Java和C,而不是JavaScript。
你需要允许以下可打印字符:
a-z、A-Z、0-9和32个符号:!"#$%&'()*+,-./:;<=>?@[] ^_`{|}~ 以及空格
需要一个JavaScript正则表达式来验证输入的字符是否是上述字符之一并丢弃其余字符。
寻找一个正则表达式来验证所有可打印字符。这个正则表达式需要仅在JavaScript中使用。我已经查阅了这篇文章,但它主要讨论了.net、Java和C,而不是JavaScript。
你需要允许以下可打印字符:
a-z、A-Z、0-9和32个符号:!"#$%&'()*+,-./:;<=>?@[] ^_`{|}~ 以及空格
需要一个JavaScript正则表达式来验证输入的字符是否是上述字符之一并丢弃其余字符。
如果你想要匹配UTF-8字符集中的所有可打印字符(根据你在8月21日的评论所示),自己做可能会很困难。JavaScript的原生正则表达式对Unicode支持不佳,但你可以使用XRegExp和正则表达式^\P{C}*$
。
如果你只想匹配从8月22日的帖子编辑中提到的那几个ASCII字母,则正则表达式很简单:
/^[a-z0-9!"#$%&'()*+,.\/:;<=>?@\[\] ^_`{|}~-]*$/i
对于非 Unicode 字符,请使用正则表达式模式^[^\x00-\x1F\x80-\x9F]+$
如果您想要处理 Unicode 字符,首先请阅读JavaScript + Unicode regexes
我建议使用正则表达式模式^[^\p{Cc}\p{Cf}\p{Zl}\p{Zp}]*$
\p{Cc}
或 \p{Control}
:ASCII 0x00..0x1F 或 Latin-1 0x80..0x9F 控制字符。\p{Cf}
或 \p{Format}
:不可见的格式指示器。\p{Zl}
或 \p{Line_Separator}
:行分隔符字符 U+2028。\p{Zp}
或 \p{Paragraph_Separator}
:段落分隔符字符 U+2029。要验证一个字符串是否只包含可打印的ASCII字符,可以使用简单的正则表达式,例如
/^[ -~]+$/
它匹配
^
- 字符串开头锚点[ -~]+
- 一个或多个(由于+
量词)在ASCII表中从空格到波浪号范围内的字符:对于Unicode可打印字符,请使用XRegExp
中的\PC
Unicode类别(匹配除控制字符外的任何字符),如已经提到的那样:
^\PC+$
查看正则表达式演示:
// ASCII only
var ascii_print_rx = /^[ -~]+$/;
console.log(ascii_print_rx.test("It's all right.")); // true
console.log(ascii_print_rx.test('\f ')); // false, \f is an ASCII form feed char
console.log(ascii_print_rx.test("demásiado tarde")); // false, no Unicode printable char support
// Unicode support
console.log(XRegExp.test('demásiado tarde', XRegExp("^\\PC+$"))); // true
console.log(XRegExp.test(' ', XRegExp("^\\PC+$"))); // false, \u200C is a Unicode zero-width joiner
console.log(XRegExp.test('\f ', XRegExp("^\\PC+$"))); // false, \f is an ASCII form feed char
<script src="http://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.min.js"></script>
var regex = /^[\u0020-\u007e\u00a0-\u00ff]*$/;
console.log( regex.test("!\"#$%&'()*+,-./:;<=>?@[] ^_`{|}~")); //should output "true"
console.log( regex.test("Iñtërnâtiônàlizætiøn")); //should output "true"
console.log( regex.test("☃")); //should output "false"
\x20-\x7e
\x80-\xff
。 - Vitim.us使用 string1.match(/[\p{Cc}\p{Cn}\p{Cs}]+/gu)
作为条件语句,如果返回true,则表示string1
包含任何不可打印字符。
或者,如果你想要逻辑等价的条件语句,string1.match(/^[\P{Cc}\P{Cn}\P{Cs}]+$/gu)
将返回true,如果string1
只包含可打印字符。
\P{Cc}
:不匹配控制字符。\P{Cn}
:不匹配未分配的字符。\P{Cs}
:不匹配UTF-8无效字符。+
:确保找到某些内容,即这也意味着空字符串""
将不被视为可打印。/g
:贪婪匹配,穷尽/贪婪地搜索字符串以查找所指定的字符集。/u
:用于匹配Unicode字符点的Unicode正则表达式运算符。 (来源:MDN Web Docs: Regular Expressions; Unicode Property Escapes。)var string1 = 'This string has unprintable characters \u0001';
if(string1.match(/[\p{Cc}\p{Cn}\p{Cs}]+/gu)) {
console.log("Unprintable string: " + string1);
}
var string2 = 'This string has only printable characters.';
if(string2.match(/^[\P{Cc}\P{Cn}\P{Cs}]+$/gu)) {
console.log("Printable string: " + string2);
}
\P{C}
:仅匹配可见字符。不匹配任何不可见字符。\P{Cc}
:仅匹配非控制字符。不匹配任何控制字符。\P{Cc}\P{Cn}
:仅匹配已分配的非控制字符。不匹配任何控制或未分配字符。\P{Cc}\P{Cn}\P{Cs}
:仅匹配已分配且为UTF-8有效的非控制字符。不匹配任何控制、未分配或UTF-8无效字符。\P{Cc}\P{Cn}\P{Cs}\P{Cf}
:仅匹配已分配且为UTF-8有效的非控制、非格式化字符。不匹配任何控制、未分配、格式化或UTF-8无效字符。这个正则表达式将匹配任何可见的字符,包括其简写和长写形式...
\p{L}\p{M}\p{N}\p{P}\p{S}\p{Z}
\p{Letter}\p{Mark}\p{Number}\p{Punctuation}\p{Symbol}\p{Separator}
\p
表示我们想要匹配的内容,但我们也有使用 \P
(大写) 表示不匹配的内容 的选项。这意味着我们可以使用 \p{C}
类,用于“不可见控制字符和未使用的代码点”。(来源:Regular-Expressions.info)。然后,一个更简单的正则表达式是 \P{C}
,但这可能在删除不可见格式时过于严格。您可能需要仔细查看并确定哪个最适合您的需求,但其中一种替代方案应该符合您的需求。
如果您想了解其他可用的字符集,请查看 regular-expressions.info ...
\p{L}
或\p{Letter}
:来自任何语言的任何字母。
\p{Ll}
或\p{Lowercase_Letter}
:具有大写变体的小写字母。\p{Lu}
或\p{Uppercase_Letter}
:具有小写变体的大写字母。\p{Lt}
或\p{Titlecase_Letter}
:仅当单词的第一个字母大写时出现在单词开头的字母。\p{L&}
或\p{Cased_Letter}
:存在小写和大写变体的字母(Ll、Lu和Lt的组合)。\p{Lm}
或\p{Modifier_Letter}
:像字母一样使用的特殊字符。\p{Lo}
或\p{Other_Letter}
:没有小写和大写字母的字母或表意文字\p{M}
或\p{Mark}
:旨在与另一个字符组合的字符(例如重音符号、umlauts、包围框等)。
\p{Mn}
或\p{Non_Spacing_Mark}
:旨在与另一个字符组合而不占用额外空间的字符(例如重音符号、umlauts等)。\p{Mc}
或\p{Spacing_Combining_Mark}
:旨在与占用额外空间的另一个字符组合的字符(许多东方语言中的元音符号)。\p{Me}
或\p{Enclosing_Mark}
:将其组合的字符括起来的字符(圆圈、正方形、键盘按钮等)。\p{Z}
或\p{Separator}
:任何类型的空格或不可见分隔符。
\p{Zs}
或\p{Space_Separator}
:不可见的空格字符,但会占用空间。\p{Zl}
或\p{Line_Separator}
:行分隔符字符U+2028。\p{Zp}
或\p{Paragraph_Separator}
:段落分隔符字符U+2029。\p{S}
或\p{Symbol}
:数学符号、货币符号、装饰符号、绘图字符等。
\p{Sm}
或\p{Math_Symbol}
:任何数学符号。\p{Sc}
或\p{Currency_Symbol}
:任何货币符号。\p{Sk}
或\p{Modifier_Symbol}
:作为自己的完整字符的组合字符(标记)。\p{So}
或\p{Other_Symbol}
:各种不是数学符号、货币符号或组合字符的符号。\p{N}
或\p{Number}
:任何脚本中的任何类型的数字字符。