gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:42:27 24 4
gpt4 key购买 nike

我有一个表格,我想限制第一个和最后一个字符。 (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" />  

最佳答案

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

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

参见 regex demo . (?!.*_$) 如果在除换行字符之外的任何 0+ 个字符之后字符串末尾有一个 _,则匹配将失败。

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

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

参见 another regex demo .此模式匹配:

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

关于编辑

您的模式与描述不同步。考虑到 preset 应该包含在 replace 方法中使用的模式,请尝试以下操作,记住 \w 匹配 _:

'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');

关于Javascript 正则表达式在开始和结束时限制下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52314936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com