[英]Street address regex for 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 下面的答案非常接近,但在我原来的问题中,我没有指定空格是特殊字符的一部分:
/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z0-9\-#\.\/]+$/
我自己尝试过加入空间特殊字符,但没有得到想要的结果。
请参阅现场示例。 现场示例
此正则表达式验证您的规则:
/^(?=.*[A-Za-z])(?=.*\d)(?!.*[^A-Za-z0-9\-#\.\/])/
解释:
^
- 字符串的开头(?=.*[A-Za-z])
- 至少一个 alpa 字符的正向前瞻(?=.*\d)
- 至少一位数字字符的正向前瞻(?..*[^A-Za-z0-9\-#\.\/])
- 任何不允许的字符的负前瞻您可以使用模式查找所有有效字符,直到字符串结尾,而不是双重否定:
/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z0-9\-#\.\/]*$/
更新基于允许空间的更新要求:
/^(?=.*[A-Za-z])(?=.*\d)(?!.*[^A-Za-z0-9\-#\.\/ ])/
说明:只需在否定字符 class 后加一个空格
或者,查找所有有效字符,包括空格:
/^(?=.*[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 的is_password_valid
中,所以它是否占用 20 行并不重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.