[英]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.