正则表达式,在开头只允许一个+号,然后是数字

时间:2017-08-02 08:05:47

标签: javascript angularjs regex

我需要匹配正则表达式,以允许它在开头用+(仅一个加号)符号开头,然后只允许数字。

这是我的指示:

public class Base
  {
   private Base()
   {
   }

  public string Name { get; set; }
 }

 public class Derived : Base
 {
  public Derived(string name)
  {  
    base.Name = name;
  }
 }

HTML:

(function(app) {
    'use strict';

    var plusOnly = function() {
        return {
            require: 'ngModel',
            restrict: 'A',
            link: function(scope, element, attr, ctrl) {
                function inputValue(value) {
                    if (value) {
                        var digitsPlus = value.replace(/^\+[0-9]+/g, '');

                        if (digitsPlus !== value) {
                            ctrl.$setViewValue(digitsPlus);
                            ctrl.$render();
                        }
                        return parseInt(digitsPlus, 10);
                    }
                    return undefined;
                }
                ctrl.$parsers.push(inputValue);
            }
        };
    };

    app.directive('plusOnly', [plusOnly]);

})(angular.module('App'));

虽然这限制了数字和+但它仍然允许我有多个优点。

我在哪里犯了错误?

感谢。

2 个答案:

答案 0 :(得分:2)

你只需要将+限制为只有一个,如下所示:

^\+{1}[0-9]+$

测试here

修改

因为您的代码逻辑存在问题...如果我理解正确,您希望删除除正则表达式匹配的内容之外的所有内容。事实上,你想要regex.Match的反面。在这种情况下,你需要消极的前瞻,如下所示:

首先,检查输入是否有效,然后,如果是,则替换值...

var match = value.match(/^\+{1}[0-9]+$/g);
if (match !== null) {
    //now replace values using negative lookahead...
    var digitsPlus = value.replace(/^(?!\+{1}[0-9]+)$/g, '');
    //some other code

这可能是您问题的答案。

答案 1 :(得分:1)

你的正则表达式是正确的。

您的功能存在逻辑问题。

您正在获取输入值,(无论它是什么),您将使用空字符串替换输入值+12321(任何数字),例如:

+ 43432abc您将替换为abc。

但你应该反过来。

我建议做这样的事情:

var digitsPlus = value.replace(/^.*?([\+0-9]?[0-9]+)?.*?$/, '$1');