簡體   English   中英

如何使用JavaScript檢測當前正則表達式中允許的字符?

[英]How to detect what allowed character in current Regular Expression by using JavaScript?

在我的Web應用程序中,我創建了一些框架,該框架用於將模型數據綁定到頁面上的控件。 每個模型屬性都有一些規則,例如字符串長度,非null和正則表達式。 在提交頁面之前,框架將使用定義的規則來驗證任何綁定的控件。

因此,我想檢測每個正則表達式規則中允許的字符,如以下示例所示。

"^[0-9]+$" allow only digit characters like 1, 2, 3.
"^[a-zA-Z_][a-zA-Z_\-0-9]+$" allow only a-z, - and _ characters

但是,此功能不應在乎允許字符的分組,定位。 它僅說明可能的字符。

您有創建此功能的想法嗎?

PS。 我知道很容易創建僅允許數字字符的數字等指定函數。 但是我需要共享/重用數據層(包含所有模型驗證器)和UI層的同一段代碼,而無需進行任何修改。

謝謝

我必須承認,我正在努力分析您的問題。

如果您要尋找一個僅在字符串完全由某個字符集合組成的情況下才匹配的正則表達式,而不管它們的順序如何,那么您的字符類示例已經非常接近了。

例如, ^[A-Za-z0-9]+$將只允許包含字母A至Z(大寫和小寫)和數字(以任何順序和任何長度)的字符串。

對於一般情況,您無法解決此問題。 正則表達式通常不會在某個特定字符上“失敗”,它們只是到了無法再匹配的地步,不得不回溯以嘗試另一種匹配方法。

一個人可以制作一個正則表達式實現,該實現可以記住回溯之前它設法匹配的最遠距離,但是大多數實現都不能做到這一點,包括JavaScript。

一種可能的前進方式是先與^pattern$匹配,如果與^pattern匹配失敗而沒有末尾錨。 這更有可能使您對字符串的左手部分進行某種匹配,因此您可以計算出匹配中有多少個字符,並說下一個字符“無效”。 對於更復雜的正則表達式,這會產生誤導,但是對於像[a-zA-Z0-9_]+這樣的簡單情況,它肯定會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM