当前位置: 首页 > 知识库问答 >
问题:

Javascript正则表达式在开始和结束时限制下划线

太叔志尚
2023-03-14

我有一个表单,我想限制第一个和最后一个字符。(javascript)限制是:

  • 输入必须以字母数字开始和结束,而不是下划线,字母数字之间只允许下划线

示例:

 Valid Entries: abc, ABC, Abc123, 123a, Abc_12, Abc_12_3a
 Invalid Entries: _abc, abc_, _abc_

我尝试创建我的正则表达式如下:

^(?!\_)(?!_*_$)[a-zA-Z0-9_]+$

这不允许在开头加下划线,这很好,但允许在我想要限制的结尾加下划线。

这里缺少任何输入。

谢谢

const validEntries = ['abc', 'ABC', 'Abc123', '123a', 'Abc_12', 'Abc_12_3a'];
const invalidEntries = ['_abc', 'abc_', '_abc_'];

const regex = /^(?!\_)(?!_*_$)[a-zA-Z0-9_]+$/;

validEntries.forEach((x) => {
  const ret = regex.test(x);
  
  console.log('Should be true :', ret);
});

console.log('-------------------');

invalidEntries.forEach((x) => {
  const ret = regex.test(x);
  
  console.log('Should be false :', ret);
});

---更新---

我在angularjs应用程序中使用正则表达式。

我已将我的指令创建为:

       .directive('restrictField', function () {
    return {
        require: 'ngModel',
        restrict: 'A',
        link: function (scope, element, attrs, ctrl) {

            var regReplace,
                preset = {                   
                    'alphanumeric-spl': '\\w_./\s/g',
                    'alphanumeric-underscore': '\\w_',
                    'numeric': '0-9',
                    'alpha-numeric': '\\w'
                },
                filter = preset[attrs.restrictField] || attrs.restrictField;                

            ctrl.$parsers.push(function (inputValue) {
                regReplace = new RegExp('[^' + filter + ']', 'ig');
                if (inputValue == undefined)
                    return ''
                cleanInputValue = inputValue.replace(regReplace, '');
                if (cleanInputValue != inputValue) {
                    ctrl.$setViewValue(cleanInputValue);
                    ctrl.$render();
                }
                return cleanInputValue;
            });
        }
    }
})

我在我的html中使用它作为:

 <input type="text" name="uname" ng-model="uname" required class="form-control input-medium" restrict-field="alphanumeric-underscore" ng-trim="false" />  

共有1个答案

华知
2023-03-14

您可以添加另一个负前瞻((?!.*u$))并使用

^(?!_)(?!.*_$)[a-zA-Z0-9_]+$

请参阅正则表达式演示。如果在除换行符之外的任何0个字符之后,字符串末尾有一个_(?!.* $)前瞻将无法匹配。

或者,您可以使用无环视模式,如

^[a-zA-Z0-9]([a-zA-Z0-9_]*[a-zA-Z0-9])?$
^[a-zA-Z0-9](\w*[a-zA-Z0-9])?$

请参阅另一个正则表达式演示。此模式匹配:

  • ^-字符串的开始
  • [a-zA-Z0-9]-一个字母数字字符
  • ([a-zA-Z0-9_]*[a-zA-Z0-9])?-可选序列
    • [a-zA-Z0-9_]*-0个或多个单词字符(在JS中,您可以将其替换为\w*
    • [a-zA-Z0-9]-一个字母数字字符

    关于编辑

    你的模式与描述不同步。考虑到预设应包含在替换方法中使用的模式,请尝试以下操作,记住匹配:

    'alphanumeric-spl': '[^\\w\\s./]+', // Removes all but alnum, _ . / whitespaces
    'alphanumeric-underscore': '^_+|_+$|_+(?=_)|\\W+', // Removes all _ at start/end and all _ before a _ and all but alnum and _
    'numeric': '[^0-9]+',  // Removes all but digits
    'alpha-numeric': '[\\W_]+'  // Removes all but alnum
    

    然后

    regReplace = new RegExp(filter, 'ig');
    

 类似资料:
  • 我正在使用正则表达式验证字符串(“-test-”)的开头和结尾是否包含hypens(-)。所以我找到了一个正则表达式来限制正则表达式开始和结束时的催眠。 当字符串包含多个带有或不带有hypen的字符(“aa”)时,该正则表达式按预期进行了验证。但是当我在没有hypen的情况下简单地传递一个字符串(“a”)时,它并没有像预期的那样工作。 此外,还需要允许特殊字符和字母数字字符,如“$abcd” 你们

  • 我有一个正则表达式,它适用于 (字母数字-不分大小写) (仅限字母-与大小写无关) (只允许使用特殊字符和) null 我们是否可以修改上面的正则表达式来限制上面的两个测试用例?

  • 我希望有一个正则表达式来检查字符串是否包含大小写字母、数字、下划线以及字符限制。这些是字符串中唯一允许的类型。

  • 我想验证用户的输入,我使用以下(工作良好)作为regex。 但当我尝试所有我想要的角色时,就是这样。 它不起作用,我不知道为什么。此外,如果您能向我解释添加和有什么不同,我将不胜感激。另外,我尝试使用来代替空格,但仍然不起作用(我更喜欢使用空格,因为我想限制行的更改)。

  • 问题内容: 该类的标准实现使用递归来实现多种形式的正则表达式(例如,某些运算符,替换)。 这种方法会导致输入字符串超过(相对较小)长度(可能不超过1,000个字符)的堆栈溢出问题,具体取决于所涉及的正则表达式。 一个典型的例子是以下正则表达式,它使用交替从周围的XML字符串中提取可能的多行元素(名为),该元素已经提供了: 上面的正则表达式与该方法一起使用,以读取“数据”捕获组并按预期工作,直到提供

  • 问题内容: 我使用以下正则表达式而不限制任何字符长度 在上面,当我尝试将字符长度限制为如下所示的15个时,会引发错误。 请帮助我使上述regEx的字符数限制为15。 问题答案: 您不能将量词应用于锚点。相反, 要限制输入字符串的长度,请 在开头使用锚定先行: 另外,我假设您想将0个或多个字母或数字与匹配。它应该看起来像(即在此处使用字符类)。 为什么不最后使用限制量词,例如? 量词仅应用于左侧的子