如何解决JavaScript 的街道地址正则表达式
本次测试的规则是:
- 必须包含字母和数字
- 可以在字符串中的任何位置包含这些特殊字符:
Number sign (#)
Minus (-)
Full stop (.)
Slash (/)
Space ( )
- 可以不包含任何其他特殊字符
- 可以不能仅由字母组成
- 可以不仅由字母和/或特殊字符组成
- 可能不能仅由数字组成
- 可以不仅由数字和/或特殊字符组成
- 数字、字母和特殊字符的顺序可以任意
所需匹配的示例:
445b
apt 445a
Apt. #445
Apt 445
Apt-445
Apt - 445
apt445
apt#445
apt/445
APT-445a
APT - 445c
Apt# 445b
Apt. #445-c
22 Elm St.
不匹配的示例:
apt four forty five
Elm St.
Elm St
Elm Street
445
445 445
445-445
#445
(any or all of the special characters by themselves)
41686d6564's 下面的答案非常接近,但在我最初的问题中,我没有指定空格是特殊字符的一部分:
/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z0-9\-#\.\/]+$/
我自己尝试将空格特殊字符合并,但没有得到想要的结果。
查看现场示例。 Live Example
解决方法
此正则表达式验证您的规则:
/^(?=.*[A-Za-z])(?=.*\d)(?!.*[^A-Za-z0-9\-#\.\/])/
说明:
-
^
- 字符串的开始 -
(?=.*[A-Za-z])
- 至少一个 alpa char 的正向预测 -
(?=.*\d)
- 至少一位字符的正向预测 -
(?!.*[^A-Za-z0-9\-#\.\/])
- 任何不允许的字符的负前瞻
代替双重否定,您可以使用模式查找所有有效字符直到字符串结束:
/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z0-9\-#\.\/]*$/
更新基于允许空格的更新要求:
/^(?=.*[A-Za-z])(?=.*\d)(?!.*[^A-Za-z0-9\-#\.\/ ])/
说明:只需在否定字符类中添加一个空格
或者,查找所有有效字符,包括空格:
/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z0-9\-#\.\/ ]*$/
更新,带有 JavaScript 测试:
const tests = `445b
apt 445a
Apt. #445
Apt 445
Apt-445
Apt - 445
apt445
apt#445
apt/445
APT-445a
APT - 445c
Apt# 445b
Apt. #445-c
22 Elm St.
apt four forty five
Elm St.
Elm St
Elm Street
445
445 445
445-445
#445`;
var regex = /^(?=.*[A-Za-z])(?=.*\d)(?!.*[^A-Za-z0-9\-#\.\/ ])/;
tests.split(/[\r\n]+/).forEach((str) => {
result = regex.test(str);
console.log(str + ' ==> ' + result);
});
听起来您正在尝试验证给定的字符串是否与一组密码规则匹配,对吗?我建议您不要使用单个正则表达式。下面是我将如何用 Perl 编写它,但这应该适用于任何语言:
# Must be all letters,digits or some punctuation.
if ( $str =~ /^[-#./A-Za-z0-9]+$/ ) {
$ok = 1;
}
else {
$ok = 0;
}
# If it is entirely letters,it is bad.
if ( $str =~ /^[A-Za-z]+$/ ) {
$ok = 0;
}
# If it is entirely digits,it is bad.
if ( $str =~ /^[0-9]+$/ ) {
$ok = 0;
}
这涵盖了您的所有规则。与匹配一个难以阅读的正则表达式相比,它的代码行数更多,但对您来说更容易理解,也更容易在未来进行修改。
您要将其包装在一个名为 is_password_valid
之类的函数中,因此它是否占用 20 行也无关紧要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。