验证不以特殊字符开头或结尾的文本框

时间:2017-01-26 07:02:12

标签: javascript jquery regex validation

我有一些要求,我需要实现一个文本框,它不允许在字符串的开头和结尾处使用特殊字符但是它有选项允许在单词的中间 例: 1)Some_ @ thing --True 2)_#2someThing --False 3)某事_ @ - false *



$(function () {
$('#text').on("change", function (e) {
if (this.value.match(/^[a-z0-9](?!.*?[^\na-z0-9]{100}).*?[a-z0-9]$/)) {
this.value = this.value.replace(/^[a-z0-9](?!.*?[^\na-z0-9]{100}).*?[a-z0-9]$/, '');
$("#eror").text("Accepts only Alphabets");
                   
                }   
         });




2 个答案:

答案 0 :(得分:2)

尝试使用类似此类^[a-z0-9](?!.*?[^\na-z0-9]{100}).*?[a-z0-9]$

的模式

以下是Demo。你可以检查一下。

你的代码中也有一些错误,这里我创造了一个新的小提琴。根据你可以修改你的代码。它可能会奏效。

1>将您的功能更改为.change,就像我在小提琴中使用的那样
2 - ;将模式与字符串进行比较,例如pattern.test(string)

New Fiddle有工作模式。
希望以上解决方案适合你。

答案 1 :(得分:0)

看起来你可能正在寻找yash发布的反向,筛选违反规则的实例,而不是符合它。

你的'如果'如果特殊字符规则被破坏,条件似乎正在查找返回true的结果,因此您可能需要以下内容:

//allows only letters and numbers at the start and end
/^[\W_\s].*$|^.*[\W_\s]$/

//allows only letters (and not numbers) at the start and end
/^[^A-Za-z_\s].*$|^.*[^A-Za-z_\s]$/

两者都将允许字符串本身内的特殊字符,在起始和结束字符之外,而不触发您的布尔值,但如果字符串以相同的字符开头或结尾,则会触发它。

作为旁注,如果您只对测试正则表达式匹配感兴趣,而不是实际返回正则表达式匹配,则应使用:

regex.test('string')

//instead of
string.match(/regex/)

match在这里对您的需求来说太过分了,只会减慢您的申请速度。 test直接以布尔形式返回其结果,并且比match更快。

MDN Section on using 'test' (如果您有兴趣了解有关此特定用例的更多信息)