如果某个字符更早出现,如何排除字符

时间:2017-06-30 04:59:43

标签: javascript regex

我试图验证美国电话号码 而且我试图排除 555)555-5555和(555-555-5555

如何排除'('如果没有')' 3月5日之后 反之亦然?

3 个答案:

答案 0 :(得分:1)

我的建议是在输入时自动格式化数字,请参阅下面的演示



$(function() {

  $('#us-phone-no').on('input', function() {

    var value = $(this).val();

    var nums = value.replace(/\D/g, '').match(/(\d{0,3})(\d{0,3})(\d{0,4})/);
    var formated = !nums[2] ? nums[1] : nums[1] + '-' + nums[2] + (nums[3] ? '-' + nums[3] : '');

    $(this).val(formated);
  });

});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="tetx" id="us-phone-no">
&#13;
&#13;
&#13;

答案 1 :(得分:0)

通常,如果可以有无限数量的嵌套括号,则无法使用Javascript正则表达式来确保括号正确平衡。你需要递归/平衡匹配。但你的情况并不复杂。

例如,您可以在正则表达式的开头添加negative lookahead assertion

/^(?![^()]*[()][^()]*$)REST_OF_REGEX_HERE/

这可确保您的输入中不会出现单个开括号或右括号。

<强>解释

^       # Start of string
(?!     # Assert that it's impossible to match...
 [^()]* #  any number of characters other than parentheses,
 [()]   #  then a single parenthesis,
 [^()]* #  then any number of characters other than parentheses,
 $      #  then the end of the string.
)       # End of lookahead

当然,可能还有其他方法可以满足您的需求,但您没有向我们展示您用于匹配的其他规则。

答案 2 :(得分:0)

简单的事情: https://regex101.com/r/g6uBF4/1

^((\(\d{3}\))|(\d{3}-))\d{3}-\d{4}

分别测试每个案例。括号(\d{3}\)| 3个数字括在括号(\d{3}-)中的3位数字。然后是数字\d{3}-\d{4}的其余部分。