【发布时间】:2011-02-20 18:11:24
【问题描述】:
我正在查看用于验证 (OWASP Regex Repository) 中的各种数据类型的正则表达式。
其中一个正则表达式称为safetext,看起来像:
^[a-zA-Z0-9\s.\-]+$
我的第一个问题是:
这个正则表达式正确吗?
补充问题
如果这个 Regex Repository 有什么好处?
更新
我主要对未转义的. 感到好奇
【问题讨论】:
我正在查看用于验证 (OWASP Regex Repository) 中的各种数据类型的正则表达式。
其中一个正则表达式称为safetext,看起来像:
^[a-zA-Z0-9\s.\-]+$
我的第一个问题是:
这个正则表达式正确吗?
补充问题
如果这个 Regex Repository 有什么好处?
更新
我主要对未转义的. 感到好奇
【问题讨论】:
链接页面中正则表达式的描述为“大小写字母和所有数字”。但是正则表达式 ^[a-zA-Z0-9\s.\-]+$ 也允许使用空格、句点和连字符。
正则表达式确保字符串仅包含字母数字字符、空格、句点和连字符,并且字符串不为空。我不熟悉上下文,但我猜他们将其命名为 safetext 的原因可能是它不允许尖括号(同时允许在文本区域中正常使用的字符),从而防止脚本注入。
句点. 不是字符类[] 中的元字符。所以你不需要在方括号内转义句号。
字符类中唯一的 special characters 或元字符是右括号 (
])、反斜杠 (\)、插入符号 (^) 和连字符 (-)。通常的元字符是字符类中的普通字符,不需要用反斜杠转义。
只要您将连字符放在字符类的开头或结尾,大多数正则表达式风格都允许使用未转义的连字符。 [!#@-] 中的连字符是文字,但 [!#-@] 中的连字符不是。第一个表示四个符号之一,而第二个表示! 以及# 和@ 的ASCII 值之间(包括)的所有字符,即ASCII 35 到64。
至于图书馆是否很好,我会说这是一个很好的起点。您可能希望根据您的要求修改它们。例如,他们的密码正则表达式展示了如何使用正向预读来检查是否出现至少一个小写/大写/数字等。但它只允许长度在 4 到 8 之间的字符串:您可能希望允许更长的密码。
【讨论】: