2017-01-26 16 views
0

我有一些要求,我需要實現一個文本框,該文本框不允許在字符串的開始和結束處使用特殊字符,但它有允許在中間字 示例的: 1)Some_ @事情--True 2)_#2someThing --False 3)something_ @ --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

嘗試模式像這樣^[a-z0-9](?!.*?[^\na-z0-9]{100}).*?[a-z0-9]$

這是Demo它。你可以檢查它。

您的代碼也存在一些錯誤,在這裏我創建了一個新的小提琴。根據你可以修改你的代碼。它可能工作。

1>將您的功能更改爲.change,因爲我在小提琴中使用
2>將模式與字符串進行比較,例如pattern.test(string)

New Fiddle工作模式。
希望以上解決方案爲您工作。

+0

它是在反向工作,我不想以允許在開始和結束的特殊字符,即使它不是允許字母 – Lier

+0

@Lier,你可以給我一個不適用於演示的字符串,你可以在測試字符串部分嘗試你自己的字符串,所以我更清楚你想要什麼 – yash

+0

它在演示中工作,但不在我的環境中。 value.match(/^[a-z0-9](?!。*?[^ \ na-z0-9] {100})。*?[a-z0-9] $ /)){ \t this .value = this.value.replace(/^[a-z0-9](?!。*?[^ \ na-z0-9] {100})。*?[a-z0-9] $ /, ''); – Lier

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' (如果你有興趣瞭解更多關於這個具體使用情況)