用于在表单中标识电话分机的正则表达式



我正在寻找识别在表单的文本区域中键入的扩展名。 扩展名是 4 位数字,但前面可能以各种方式

  • x1234
  • x.1234
  • ext1234
  • ext.1234
  • 或者只是普通的1234

我也不想像555-1212这样的正常电话号码匹配并导致误报。

我开始使用的正则表达式连续查找 4 位数字,/d{4}/匹配 12345

我已经尝试了各种其他正则表达式字符串,到目前为止我最接近的是:

b[a-zA-Z][^-]?D*d{4}(?!d)b

但是,如果用户仅将 1234 放入文本框中,则这不符合条件。 (此外,我觉得我的正则表达式可能比它需要的更像噩梦,并且可以通过适当的专业知识进行优化。

下面是我试图完成的示例。

$(document).ready(function() {
$("#test_text").keyup(function() {
var str = $("#test_text").val();
var search = str.match(/b[a-zA-Z][^-]?D*d{4}(?!d)b/);
if (search != null) {
$("#result").text("Success!");
} else {
$("#result").text("Failure. :(");
}
})
})
#test_text {
width: 50%;
resize: none;
}
#result {
height: 32px;
margin-top: 10px;
padding: 3px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Try the following:</p>
<ul>
<li>8585 (Should be success) Wrong</li>
<li>x8585 (Should be success) Correct</li>
<li>It's Dave. 8585 (Should be success) Correct</li>
<li>It's Dave. 85858 (Should be failure) Correct</li>
</ul>
<textarea id="test_text" rows="5"></textarea><br>
<div id="result"></div>

从最后一个单词的开头开始,b,在extx之间交替,什么都没有,后跟可选的.,后跟 4 位数字和字符串的末尾:

(^| )(x|ext|).?d{4}$

另请注意,如果您只想进行布尔检查以查看正则表达式是否与字符串匹配,则可以使用.test,结合条件(三元(运算符以获取更多 DRY 代码:

$("#test_text").keyup(() => {
var str = $("#test_text").val();
$("#result").text(
/(^| )(x|ext|).?d{4}$/.test(str)
? "Success!"
: "Failure"
);
})
#test_text {
width: 50%;
resize: none;
}
#result {
height: 32px;
margin-top: 10px;
padding: 3px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Try the following:</p>
<ul>
<li>8585 (Should be success) Wrong</li>
<li>x8585 (Should be success) Correct</li>
<li>It's Dave. 8585 (Should be success) Correct</li>
<li>It's Dave. 85858 (Should be failure) Correct</li>
</ul>
<textarea id="test_text" rows="5"></textarea><br>
<div id="result"></div>

最新更新