繁体   English   中英

JavaScript 的街道地址正则表达式

[英]Street address regex for JavaScript

该测试的规则是:

  1. 必须包含字母和数字
  2. 可以在字符串中的任何位置包含这些特殊字符:
Number sign (#)
Minus (-)
Full stop (.)
Slash (/)
Space ( )
  1. 不得包含任何其他特殊字符
  2. 不能仅由字母组成
  3. 不能仅由字母和/或特殊字符组成
  4. 不能仅由数字组成
  5. 不能仅包含数字和/或特殊字符
  6. 数字、字母和特殊字符可以按任意顺序排列

所需匹配的示例:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM