簡體   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